计算数组内的最大日期时间

时间:2014-12-21 00:58:53

标签: arrays mongodb datetime

我有这样的文件:

{
    "_id" : ObjectId("5495f04088df2df349fd54cc"),
    "deleted" : "1",
    "packet" : [ 
        {
            "datetime" : ISODate("2014-12-20T21:54:08.278Z"),
            ...
        },
        {
            "datetime" : ISODate("2014-12-20T23:54:08.278Z"),
            ...
        },
        {
            "datetime" : ISODate("2014-12-20T20:54:08.278Z"),
            ...
        }
    ]
}

我需要更新数组中最高日期时间早于特定日期时间的文档...

在SQL中它将类似于:

update t1 set f1 = "whatever" where max(datetime) > date_add(now(), interval -5 minutes)

如何在mongo数组上执行此操作?

1 个答案:

答案 0 :(得分:0)

我非常确定defacto mongo find将使用任何特殊的jizz在数组中搜索。大于号的部分也很简单。

db.documents.find("packet.datetime" : {$gt : ISODate("2014-01-01T00:00:05.000Z") } );

同样你可以一次更新,确保使用upsert false和multi true(在你的情况下)

db.documents.update("packet.datetime" : {$gt : datetime },  
                  {f1: "whatever"}, {upsert: false, multi: true} );

将匹配您的目标sql sans间隔thing-a-ma-bob

update t1 set f1 = "whatever" where max(datetime) > date_add(now(), 
       interval -5 minutes)

更新:根据您的评论,您可能需要"不低于" vs" gt比"

db.documents.find("packet.datetime" :
              {$not: {$lt : ISODate("2014-01-01T00:00:05.000Z") } } );

它会根据数组

中的所有日期时间选择文档