Node.js 将数据批量更新到mongodb中
我的数据库中存储了以下数据Node.js 将数据批量更新到mongodb中,node.js,mongodb,express,mongoose,mongodb-query,Node.js,Mongodb,Express,Mongoose,Mongodb Query,我的数据库中存储了以下数据 [ { date:'1-1-2016', users:[ { 'name':'james', 'age':18 }, { 'name':'alice', 'age':20 } ] },
[
{
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岁
但如何批量更新,说一个日期范围是给定的?是否将循环用于上述查询?我认为这是没有效率的。需要指导。您可以使用
$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);
var data=[{“name”:“james”,“age”:10},{“name”:“alice”,“age”:11}];
var查询=[];
对于(变量i=0;i
您可以使用$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);
var data=[{“name”:“james”,“age”:10},{“name”:“alice”,“age”:11}];
var查询=[];
对于(变量i=0;i
如果在2016年1月1日,我想将詹姆斯的年龄设置为10岁,在2016年2月1日,我想将詹姆斯的年龄设置为11岁,依此类推,该怎么办?不是日期范围对不起,我错过了。这是几个不同日期的批量更新数据。我使用bulkWrite
进行了更新,以基于动态配置名称/age执行多个updateMany
。这正是我之前所做的。但您的逻辑有缺陷,如果用户选择1-1-2016、4-1-2016和1-2-2016会怎么样?如果2016年1月1日我想将詹姆斯的年龄设置为10岁,2016年2月1日我想将詹姆斯的年龄设置为11岁,依此类推?不是日期范围对不起,我错过了。这是几个不同日期的批量更新数据。我使用bulkWrite
进行了更新,以基于动态配置名称/age执行多个updateMany
。这正是我之前所做的。但您的逻辑有缺陷,如果用户选择1-1-2016、4-1-2016和1-2-2016怎么办?