Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.7k views
in Technique[技术] by (71.8m points)

mongodb - date comparison doesn't work in aggregation

I have the following aggregation:

db.runCommand(
  {"aggregate":"Order","pipeline":[
    {"$match":{"shopId":28440395907}},
    {"$match":{"createdAt":{"$gte":{"$date":{"$numberLong":"0"}}}}},
    {"$sort":{"updatedAt":-1}},
    {"$facet":{"results":[{"$skip":0},{"$limit":25}],"count":[{"$count":"count"}]}}
  ],"allowDiskUse":true,"cursor":{}}
);

The problem is that it fails to return any results. Replacing the date filter with literally anything else provides results so my guess is that there is a problem with date conversion. I tried all the versions I found in tutorials (like new Date("2015-06-17 10:03:46.000Z")), it always acts the same. Can anyone please explain why and how to fix?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The date format is wrong, use the format according to ISO-8601:

new Date("2015-06-17T10:03:46Z")

or

ISODate("2015-06-17T10:03:46Z")

ISODate() is an alias for new Date() you have in the mongo shell.

Format 2015-06-17 10:03:46Z is commonly used but not compliant to ISO-8601 standard if you like to specify a time at a certain day.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...