插入/更新子元素或插入集合中的完整文档-取决于现有的主元素



如果从表单发送数据,我首先检查集合中是否已经存在具有该标题的文档。如果不是这种情况,则应该插入数据。否则,只有一部分数据将被插入——如果它本身不存在,因为我想避免重复。

我是这样做的:

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]
    });
}

但是我有两个问题:

  1. 有更聪明的方法吗?现在我必须先做一个find().count()插入/更新之前。
  2. 我的代码不工作,因为我得到错误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;
    }
});

最新更新