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

时间:2015-09-17 20:29:19

标签: javascript mongodb meteor

如果我从表单发送数据,我首先检查集合中是否已存在具有标题的文档。 如果不是这种情况,则应插入数据。 否则,只会插入一部分数据 - 如果它不存在,我希望避免重复。

所以我就是这样做的:

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]
  3. 时,我的代码无效

    更新

    这会是一样的吗?

    Collection.update(
        { journal: journal }, 
        { 
            $addToSet:  { article: article },
            $set:       { journal: journal, article: article }
        },
        { upsert: true }
    );  
    

1 个答案:

答案 0 :(得分:1)

只需像这样在服务器上创建一个方法

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