如果从表单发送数据,我首先检查集合中是否已经存在具有该标题的文档。如果不是这种情况,则应该插入数据。否则,只有一部分数据将被插入——如果它本身不存在,因为我想避免重复。
我是这样做的:
var journal = list[0].value,
article = {
author: list[1].value,
pageNumbers: list[2].value,
reference: id
}
if (Collection.find({journal: journal}).count()) {
Collection.update(
{ journal: journal },
{ $addToSet: {
article: article
}
});
}
else {
Collection.insert({
journal: journal,
article: [article]
});
}
但是我有两个问题:
- 有更聪明的方法吗?现在我必须先做一个find().count()插入/更新之前。
- 我的代码不工作,因为我得到错误
Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403]
这是一样的吗?
Collection.update(
{ journal: journal },
{
$addToSet: { article: article },
$set: { journal: journal, article: article }
},
{ upsert: true }
);
在服务器上创建一个这样的方法
Meteor.methods({
'saveToCollection': function(collection, journal, article){
if (global[collection].find({journal: journal}).count()) {
global[collection].update(
{ journal: journal },
{
$addToSet: { article: article }
}
);
}
else {
global[collection].insert({
journal: journal,
article: [article]
});
}
return true;
}
});