只有在Meteor中不存在时才能插入

时间:2015-10-13 18:31:08

标签: javascript meteor

我正在尝试使用html中的表单更新我的主题集合。当我使用topics.insert()时,我可以将每个文档添加到集合中,但如果我使用更新它不起作用。我想将文档添加到集合中,只有它尚不存在。

Topics = new Mongo.Collection("Topics");

if(Meteor.isClient){
    Template.body.helpers({
    topic: function(){
    return Topics.find({});
    }
    });
    Template.body.events({
            "submit .new-topic": function(event){

            //prevent reload on submit
            event.preventDefault();
            //get content from form
            var title = event.target.title.value;
            var subtopic = event.target.subtopic.value;
            var content = event.target.content.value;
            var video = event.target.video.value;

            Topics.update({
                title: title},{
                title: title,
                subtopic: subtopic, 
                content: content,
                video: video
                },
                {upsert: true}
                );
        //clear forms
            event.target.title.value = "";
            event.target.subtopic.value = "";
            event.target.content.value="";
            event.target.video.value="";
            }
            });
}   

2 个答案:

答案 0 :(得分:4)

您应该使用upsert

  

更新+插入的混合

Topics.upsert({
    // Selector
    title:title
}, {
    // Modifier
    $set: {
        ...
    }
});

See Meteor Docs (collection.upsert).

答案 1 :(得分:-1)

我会给你一个广泛的概述类型答案。

首先,您需要检查您的条目是否存在。

var collectionEntry = Topics.find({title:title});

如果找到,可以更新。

Topics.update({title:title},$set{ ... })

如果找不到,请插入。

Topics.insert({ ... })

使用此处的文档来了解如何更新mongo集合。 http://docs.mongodb.org/manual/reference/operator/update/set/

此外,您应该按文档ID进行更新,并且应该将其作为Meteor方法进行更新,而不是从客户端进行更新。