我有这样的文件:
{
"_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数组上执行此操作?
答案 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") } } );
它会根据数组
中的所有日期时间选择文档