我使用upsert
更新mongodb
中的文档(如果存在),如果不存在,则插入新文档。它工作正常,但每当我更新或插入时,它都会在数据库中保存多个文档。例如,如果我想通过将其值user_name
添加为Ammy
来更新一个名为user_name
的字段,则会将A
的一个文档保存为user_name
,然后保存{{1} }}再次m
,然后再次m
,最后user_name
为Ammy
。一个条目共有4个单独的文档。有什么问题?
以下是代码: Main.js
Router.route('/temp1/:ppid', function () {
this.render('temp1', {
data: function () {
return Dbs.findOne({user_id:this.params.ppid});
Router.go("/temp1",{},{user_id:this.params.ppid});
}
});
});
Template.temp1.events({
'keyup .sub'(event) {
onst target= event.currentTarget;
const user_id1 =target.user_id.value;
const add =target.add.value;
const const = target.const.value;
const path1 = target.path.value;
const user_name1 =target.user_name.value;
var p=Router.current().params.ppid;
Meteor.call('dbs.update',p,user_id1, cont1, add1,
pth1,user_name1);
}
});
usermethod.js:
Meteor.methods({
'dbs.updateuser'(p, user_id1, cont1, add1, pth1,user_name1) {
Dbs.update({ user_id: p }, {
$set: {
user_id: user_id1,
user_name:user_name1,
cont: cont1,
add: add1,
pth: pth1
}
},
{ upsert: true }
);
}
});
答案 0 :(得分:2)
正如@Styx在评论中提到的那样,您使用变量p
和user_id1
作为字段user_id
的值。如果变量p
和user_id1
具有相同的值,您将能够执行您想要的操作,仅。
三种解决方案:
p
和user_id1
具有相同的价值user_id1
变量p
变量第二个解决方案的示例:
Meteor.methods({
'dbs.updateuser'(p, user_id1, cont1, add1, pth1,user_name1) {
Dbs.update({ user_id: user_id1 }, // this value must be the same
{
$set: {
user_id: user_id1, // than this value, so it wont insert more documents
user_name:user_name1,
cont: cont1,
add: add1,
pth: pth1
}
},
{ upsert: true });
}
});
编辑:第4个解决方案,只删除user_id
标记中$set
字段的行。
Meteor.methods({
'dbs.updateuser'(p, user_id1, cont1, add1, pth1,user_name1) {
Dbs.update({ user_id: p },
{
$set: {
user_name:user_name1,
cont: cont1,
add: add1,
pth: pth1
}
},
{ upsert: true });
}
});