我一直在玩在 mongodb 中存储推文,每个对象看起来像这样:
{ "_id" : ObjectId("4c02c58de500fe1be1000005"), "contributors" : null, "text" : "Hello world", "user" : { "following" : null, "followers_count" : 5, "utc_offset" : null, "location" : "", "profile_text_color" : "000000", "friends_count" : 11, "profile_link_color" : "0000ff", "verified" : false, "protected" : false, "url" : null, "contributors_enabled" : false, "created_at" : "Sun May 30 18:47:06 +0000 2010", "geo_enabled" : false, "profile_sidebar_border_color" : "87bc44", "statuses_count" : 13, "favourites_count" : 0, "description" : "", "notifications" : null, "profile_background_tile" : false, "lang" : "en", "id" : 149978111, "time_zone" : null, "profile_sidebar_fill_color" : "e0ff92" }, "geo" : null, "coordinates" : null, "in_reply_to_user_id" : 149183152, "place" : null, "created_at" : "Sun May 30 20:07:35 +0000 2010", "source" : "web", "in_reply_to_status_id" : { "floatApprox" : 15061797850 }, "truncated" : false, "favorited" : false, "id" : { "floatApprox" : 15061838001 }
我将如何编写一个查询来检查 created_at 并找到 18:47 到 19:00 之间的所有对象?我是否需要更新我的文档,以便以特定格式存储日期?
在 MongoDB Cookbook中 查询日期范围(特定月份或日期) 对此事有很好的解释,但下面是我自己尝试过的,它似乎有效。
items.save({ name: "example", created_at: ISODate("2010-04-30T00:00:00.000Z") }) items.find({ created_at: { $gte: ISODate("2010-04-29T00:00:00.000Z"), $lt: ISODate("2010-05-01T00:00:00.000Z") } }) => { "_id" : ObjectId("4c0791e2b9ec877893f3363b"), "name" : "example", "created_at" : "Sun May 30 2010 00:00:00 GMT+0300 (EEST)" }
根据我的实验,您需要将日期序列化为 MongoDB 支持的格式,因为以下内容会产生不希望的搜索结果。
items.save({ name: "example", created_at: "Sun May 30 18.49:00 +0000 2010" }) items.find({ created_at: { $gte:"Mon May 30 18:47:00 +0000 2015", $lt: "Sun May 30 20:40:36 +0000 2010" } }) => { "_id" : ObjectId("4c079123b9ec877893f33638"), "name" : "example", "created_at" : "Sun May 30 18.49:00 +0000 2010" }
在第二个示例中,没有预期的结果,但仍然有一个结果。这是因为完成了基本的字符串比较。