3

我有许多具有以下结构的文档:

{
    _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()

有任何想法吗?

4

1 回答 1

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小时,单位是毫秒。

于 2013-05-26T08:27:41.660 回答