MongoDB插入和upsert无法正常工作 - 使用流星帧工作

时间:2016-11-19 06:00:23

标签: javascript mongodb meteor

使用Meteor框架版本1.2.1 我有一个表单,可以将数据添加到Mongo集合中。但是我发现javascript代码执行没有错误(并且所有的debug console.log消息都按照我的预期显示)但是仍然没有我刚刚插入的数据集合。问题在于这种情况是随机发生的。因此有时插入工作正常,而有时插入不起作用。与upsert命令类似的问题。我的html和js代码粘贴在下面(注意我没有删除autopublish和不安全的包)。无法确定代码中的问题是什么,需要帮助

JS代码

ProjectList = new Mongo.Collection("projectList");
ListItem    = new Mongo.Collection("listItem");
if (Meteor.isClient) {
Template.create.events({
  'submit .add_chapter': function (event) {
    var addtoWhat;
    var chapName = event.target.chapName.value;
    if (event.target.addToWhat.value) {
      if (event.target.addToWhat.value.length > 0) {
        addtoWhat = event.target.addToWhat.value;
      } else {
      }
    } else {
    } 
    if (addtoWhat) {
      var addToWhatItem = ListItem.findOne({name:addtoWhat});
      var item = {
        name : chapName,
        list : [],
      }
      var id = ListItem.insert(item);
      if (id) {
        addToWhatItem.list.push(id);
        if (!ListItem.upsert({_id:addToWhatItem._id}, addToWhatItem))  {
          alert("Unable to upsert");
        }
      } else {
        alert("Unable to insert");
      }

    } else {
      var projList;
      if (!ProjectList.findOne({projectId:"123"})) {
        projList = {
          projectId : "123",
          list : [],
        };
        var topid = ProjectList.insert(projList);
        if (topid) {
          console.log ("Top Insert succesful with id " + topid);
        } else {
          console.log ("Error Top Insert unsuccesful with id ");
        }
      }
      projList = ProjectList.findOne({projectId:"123"});
      var item = {
        name : chapName,
        list : [],
      }
      var id = ListItem.insert(item);
      projList.list.push(id);
      if(!ProjectList.upsert({_id:projList._id}, projList)) {
        console.log("Upsert failed");
      } else {
        console.log("Upsert successful");
      }
    }
  }, 
  'submit .gen_tree' : function(event) {
     getElements();
  }

});

function getElements() {
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

HTML代码

         <head>
           <title>test_hierarchy2</title>
         </head>

         <body>
           <h1>Welcome to Meteor!</h1>
           {{> create}}
         </body>

         <template name="create">
           <form class="add_chapter" method="post">
             <label>addToWhat</label>
             <input type="text" name="addToWhat">
             <label>chapName</label>
             <input type="text" name="chapName">
             <button type="submit">Add</button>
           </form>
           <form class="gen_tree" method="post">
              <button type="submit">generate</button>
           </form> 
         </template>

1 个答案:

答案 0 :(得分:0)

试试这个

ProjectList.update({_id:projList._id}, projList, {upsert:true}, function(error,doc){
   if(error){
       console.log(error);
   }
   else{
       console.log(doc);
   }
})