我的数据存储在我的数据库中。
[
{
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}})
因此,这将根据日期和用户的名称将詹姆斯的年龄从18岁更新为5岁。
但如何批量更新,说明了一系列日期?使用上面的查询循环?我觉得它效率不高。需要指导。
答案 0 :(得分: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 })
使用许多条件name / age进行批量更新:
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);