2016-12-29 132 views
0

我有下面的数据存储在我的分贝。批量更新数据到mongodb

[ 
    { 
     date:'1-1-2016', 
     users:[ 
      { 
       'name':'james', 
       'age':18 
      }, 
      { 
       'name':'alice', 
       'age':20 
      } 
     ] 
    }, 
    { 
     date:'2-1-2016', 
     users:[ 
      { 
       'name':'james', 
       'age':18 
      }, 
      { 
       'name':'alice', 
       'age':20 
      }, 
      { 
       'name':'xiaomi', 
       'age':29 
      } 
     ] 
    } 
] 

我有一个挑战,批量更新对象数组有效。

我最初的解决方案,在单个集合更新是

Users.update({date:'1-1-2016','user.name':'james'},{'$set':'users.$.age':5}}) 

因此,这将更新詹姆斯的年龄从5 18,日期和用户名基地。

但是如何批量更新,说给出了一个日期范围?使用循环与上面的查询?我认为这不是有效的。需要指导。

回答

2

您可以使用$gte/$gt$lte/$lt匹配日期范围:与许多情侣的条件名称/年龄

db.users.update({ 
    date: { 
     $gte: '1-1-2016', 
     $lt: '31-1-2016' 
    }, 
    'users.name': 'james' 
}, { '$set': { 'users.$.age': 10 } }, { 'multi': true }) 

要批量更新:

var data = [{ "name": "james", "age": 10 }, { "name": "alice", "age": 11 }]; 

var query = []; 

for (var i = 0; i < data.length; i++) { 

    query.push({ 
     updateMany: { 
      "filter": { 
       date: { 
        $gte: '1-1-2016', 
        $lt: '31-1-2016' 
       }, 
       'users.name': data[i].name 
      }, 
      "update": { '$set': { 'users.$.age': data[i].age } } 
     } 
    }) 
} 

db.users.bulkWrite(query); 
+0

如果1-什么1-2016我想将詹姆斯的年龄设置为10岁,2-1-2016年我想将詹姆斯的年龄设置为11岁等等。这不是日期范围对不起,我错过了解释。它是几个不同日期的批量更新数据。 –

+0

我已经更新'bulkWrite'来执行几个'updateMany'基于动态配置名称/年龄 –

+0

这正是我以前所做的。但是你的逻辑有缺陷,如果用户选择了1-1-2016,4-1-2016和1-2-2016,该怎么办? –