我有很多文件,结构如下:
{
_id: ObjectId("519af935c1a9f8094f0002aa"),
messages: [{
message: "Message A",
timestamp: 1369130219638
},
{
message: "Message B",
timestamp: 1369130249638
},
{
message: "Message C",
timestamp: 1369130291638
}
]
}
...我不知道如何查询超过1小时前发布最后一条消息的所有文档。例如:get all documents where timestamp < now() - 3600
其中now()
是当前时间戳。
有什么想法吗?
答案 0 :(得分:3)
文档查询
mongodb查询将返回包含带时间戳的消息的文档。你可以做到
var tofilter = Messages.find({"messages.timestamp":{$lt:new Date().getTime()-3600*1000}});
现在你必须摆脱每个文件中与日期/时间查询不匹配的所有消息:
上述查询将返回符合条件的所有文档,但只要其中一条符合条件,它们就会包含每条文件中的所有邮件,无论它们具有什么时间戳。
过滤消息
var results = tofilter.map(function(doc) {
var messages = doc.messages;
return _.filter(messages, function(message) {
return (message.timestamp < new Date().getTime()-3600*1000)
});
});
所以现在results
将包含所有mongodb文档,仅包含与日期/时间查询匹配的邮件
* 注意 new Date.getTime()
以js格式返回时间戳,以毫秒为单位,因此需要将3600乘以1000以获得1小时的毫秒数。