在原始查詢,timestamp
是一個簡單的字符串字段和Date()
將被視爲在蒙戈外殼的字符串。相比那些操作數會像其他任何字符串比較:
$ mongo
MongoDB shell version: 2.2.0-rc1-pre-
connecting to: test
> db.foo.drop()
true
> db.foo.insert({ x: Date() });
> db.foo.find()
{ "_id" : ObjectId("50218e808930273947a21cf3"), "x" : "Tue Aug 07 2012 17:54:09 GMT-0400 (EDT)" }
> sleep(1000)
null
> db.foo.find({ x: { $lt: Date() }});
{ "_id" : ObjectId("50218e808930273947a21cf3"), "x" : "Tue Aug 07 2012 17:54:09 GMT-0400 (EDT)" }
> db.foo.find({ x: { $gt: Date() }});
>
ISODate()
是JS相當於爲Mongo date fields,並且它使用$gt
或$lt
運營時不與字符串值相媲美:
> db.foo.find({ x: { $gt: ISODate() }});
> db.foo.find({ x: { $lt: ISODate() }});
> db.foo.find({ x: { $ne: ISODate() }});
{ "_id" : ObjectId("50218e808930273947a21cf3"), "x" : "Tue Aug 07 2012 17:54:09 GMT-0400 (EDT)" }
> db.foo.insert({x: ISODate() });
> db.foo.find({ x: {$gt: Date() }});
> db.foo.find({ x: {$lt: Date() }});
{ "_id" : ObjectId("50218e808930273947a21cf3"), "x" : "Tue Aug 07 2012 17:54:09 GMT-0400 (EDT)" }
> db.foo.find({ x: {$ne: Date() }});
{ "_id" : ObjectId("50218e808930273947a21cf3"), "x" : "Tue Aug 07 2012 17:54:09 GMT-0400 (EDT)" }
{ "_id" : ObjectId("50218fa18930273947a21cf4"), "x" : ISODate("2012-08-07T21:58:57.350Z") }
>
蒙戈的確定義了compare orders between types,其中字符串出現在日期之前,但是與同一字段在整個集合中可能具有不同類型時的排序順序有關。
請注意,如果您經常想要刪除舊記錄(例如,在批處理過程中),您可能對TTL collections感興趣,這是即將發佈的2.2版本中的新功能。 Kristina Chodorow還在this blog entry上寫了一篇有趣的介紹。
@ Error-SyntacticalRemorse:雖然有更多的上下文很好,但[NAA指南](https://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when如果它具有被推薦的基本代碼元素的實際名稱,則它明確地不標註任何「NAA」。今後不要標記這種類型的答案。 – 2017-08-25 00:07:47
@ Error-SyntacticalRemorse:VLQ,那麼?當我編輯時,我注意到了自動downvote。但VLQ更不合理。 (假設某人在使用自動裝罐自動裝箱時會出現標記,這是非常合理的行爲。) – 2017-08-25 00:18:07
@ Error-SyntacticalRemorse:不,它是[Community♦](https://stackoverflow.com/users/-1/community),當VLQ/NAA標記通過編輯發生爭議時,會自動發出downvote。 – 2017-08-25 00:20:14