更新或添加mongodb中嵌套数组上的数据
我是mongodb的新手。我想在现有文档上更新或添加新数组值 我的意见是:更新或添加mongodb中嵌套数组上的数据,mongodb,meteor,Mongodb,Meteor,我是mongodb的新手。我想在现有文档上更新或添加新数组值 我的意见是: { "_id" : "Tx8Yo3FJC7WpqNpGs", "sharedId" : "LnkvSu8zdaahHjQmu", "data" : [{ "ownerId" : "100", "taskId" : 1000, "taskName" : "trip" },{ "ownerId" : "100", "taskId" : 2000, "
{
"_id" : "Tx8Yo3FJC7WpqNpGs",
"sharedId" : "LnkvSu8zdaahHjQmu",
"data" : [{
"ownerId" : "100",
"taskId" : 1000,
"taskName" : "trip"
},{
"ownerId" : "100",
"taskId" : 2000,
"taskName" : "meeting"
}]
}
{
"_id" : "Tx8Yo3FJC7WpqNpGs",
"sharedId" : "LnkvSu8zdaahHjQmu",
"data" : [{
"ownerId" : "100",
"taskId" : 1000,
"taskName" : "trip"
},{
"ownerId" : "100",
"taskId" : 2000,
"taskName" : "meeting"
},{
"ownerId" : "100",
"taskId" : 3000,
"taskName" : "games"
}
]
}
我已经试过了,但没有成功
SharedTask.update({
sharedId: sharedToIds,
data: {
ownerId: userId,
taskId: taskId
},
}, {
$push: {
data: [{
'ownerId': userId,
'taskId': taskId,
'taskName': taskName
}]
}
}, {
upsert: true
});
使用
$addToSet
$addToSet
运算符向数组中添加一个值,除非该值已经存在,在这种情况下,$addToSet
对该数组不做任何操作
SharedTask.update({
sharedId: sharedToIds,
}, {
$addToSet: {
data: {
'ownerId': userId,
'taskId': taskId,
'taskName': taskName
}
},{
upsert: true
}
});
- $push更改为$addToSet
- 数据值为数组,更改为单个对象
var _ = require('underscore');
var updated = {
ownerId : "100",
taskId : 2000,
taskName : "meeting1" };
SharedTask.findOne({
sharedId: sharedToIds,
}, function(err, sharedTask){
if(!err){
var index = _.findIndex(sharedTask.data, { taskId: updated.taskId, ownerId:updated.ownerId });
if(~index){
sharedTask.data[index] = updated;
}else{
sharedTask.data.push(updated);
}
sharedTask.save(function(err){
if(!err){ console.log("Its okay"); }
});
}
});
您可以如上所述执行此操作。但有一个问题是,它不会更新现有版本。您能举个例子吗。实际上,我使用$addToSet代替$set,但给出错误不起作用。它给出的错误为errro:MinimongoError:无法将$addToSet修饰符应用于非数组。抱歉,我忘记更新匹配查询。仅与sharedIdIt相比,在更新现有taskName更新的情况下,它将不起作用