当位置(索引)未知时,删除数组中的多个项目

时间:2014-07-22 18:02:15

标签: mongodb

我有以下的Mongo数据库架构:

"Price_History" : [
    {
        "pr" : 62,
        "BookingDateTo" : "2014-08-05T18:41:35",
        "CollectionDate" : "2014-07-22T18:41:35",
        "Vendor" : "test",
        "BookingDateFrom" : "2014-08-04T18:41:35"
    },
    {
        "BookingDateFrom" : "2014-08-04T23:01:37",
        "BookingDateTo" : "2014-08-05T23:01:37",
        "pr" : 62,
        "Vendor" : "test",
        "CollectionDate" : "2014-07-19T23:01:37"
    }
],

这应该是:

"Price_History" : [
    {
        "pr" : 62,
        "BookingDateTo" : "2014-08-05T18:41:35",
        "CollectionDate" : "2014-07-22T18:41:35",
        "Vendor" : "Trv",
        "BookingDateFrom" : "2014-08-04T18:41:35"
    },

如果Price_History.CollectionDate较旧,则查询应删除数组中的多个项目,然后2014-07-19T23:01:37 最后,查询应该更新所有文档

是可以的吗?

1 个答案:

答案 0 :(得分:2)

你已经关闭了,但是你的钥匙中有一些不匹配的引号,这些内容正在破坏,应该是:

db.coll.update({}, 
    {$pull: {Price_History: {CollectionDate: {$lte : "2014-07-19T23:01:37"}}}},
    {multi: true})

我还将其更改为使用$lte,因为您正在寻找超过"年龄超过"。使用$pull代替$pullAll也非常重要,因为$pullAll只会在$pull执行查询匹配时删除完全匹配的元素。