集合插入如果为空则更新

时间:2016-02-09 11:03:05

标签: meteor

此代码显示一个mainMenu,其中包含要单击的menuItems。 “Template.mainMenu”
当单击menuItem时,我需要将menuItem的值存储在文档中,但如果用户单击其他项目,则需要更改该值而不创建其他文档。

以下代码未使用新的menuItem值更新文档。感谢

Tasks = new Mongo.Collection('tasks');

Template.mainMenu.helpers({
  menuItems: [
    {menuItem: "task1"},
    {menuItem: "task2"},
    {menuItem: "task3"},
    {menuItem: "task4"},
    {menuItem: "task5"},
    {menuItem: "task6"},
    {menuItem: "task7"}
  ]
});

Template.mainMenu.events({
  'click .menuItem': function (event) {
    var item = $(event.currentTarget).data('value');
    if (Tasks.find().count() === 0) {
      Tasks.insert({menuItem: item});
    } else {
      Tasks.update({_id: item._id} ,{$set: {menuItem: item}});
    }
  }
});

2 个答案:

答案 0 :(得分:0)

Upsert将使用新值更新id,而不插入新行。如果您传递的ID在数据库中不存在,则会创建一个新的。

Template.mainMenu.events({
  'click .menuItem': function (event) {
    var item = $(event.currentTarget).data('value');
    Tasks.upsert({_id: item._id} ,{$set: {menuItem: item}});
  }
});

更多信息:http://docs.meteor.com/#/full/upsert

答案 1 :(得分:0)

Template.mainMenu.events({
  'click .menuItem': function (event) {
    var item = $(event.currentTarget).data('value');
    Tasks.update({_id: item._id} ,{$set: {menuItem: item}},{upsert : true});
  }
});

这是语法,希望它会有所帮助:)