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

标签 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 :不允许。不受信任的代码只能通过 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;
    }
});

关于javascript - 插入/更新子元素或在集合中插入完整文档 - 取决于现有的主元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639425/

相关文章:

javascript - meteor 错误 : Uncaught Error: Cannot find module 'component.jsx'

javascript - Javascript函数简写的扩展

javascript - 使用 jQuery 从 HTML 中的多个图像元素中删除文件路径

javascript - 根据另一个对象数组过滤一个对象数组

javascript - 如何将我的 meteor 应用程序连接到外部 MongoDB?

javascript - Meteor collection.insert 回调返回新的id

javascript - Angular 路线错误: $injector:modulerr Module Error

mongodb - 去mgo新记录?

javascript - 在 JSON.parse 中使用 BsonDocument.ToJson 的结果失败

javascript - 用于多个文本输入的多个事件映射和帮助程序