MongoDB在嵌套对象上的查找

3

我有许多以下结构的文件:

{
    _id: ObjectId("519af935c1a9f8094f0002aa"),
    messages: [{
          message: "Message A",
          timestamp: 1369130219638
      },
      {
          message: "Message B",
          timestamp: 1369130249638
      },
      {
          message: "Message C",
          timestamp: 1369130291638
      }
    ]
}

我不知道如何查询所有最后一条消息发布时间超过1小时的文档。类似于:获取所有时间戳 < now() - 3600 的文档,其中now()是当前时间戳。

有什么想法吗?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
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小时的毫秒数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,