在meteor mongo中更新子文档

时间:2016-02-02 21:27:30

标签: mongodb meteor

我正在处理需要更新meteor mongo中的子文档的查询。我的代码如下所示:

 Cases.update(
  {"_id":doc._id,"notes._id": doc.noteid},
  {$set:{
   'notes.$': {
                'note': doc.note,
                'updatedBy': currentUser,
                'updatedAt': date
              }
}});

这确实有效,但它会删除更新中没有的其他字段,例如“createdAt”和“date”。我做到了这一点,但我得到了相同的结果:

Cases.update(
  {"_id":doc._id,"notes._id": doc.noteid},
  {$set:{
   'notes.$': {
                'note': doc.note,
                'updatedBy': currentUser,
                'updatedAt': date,
                'createdBy':doc.createdBy,
                'date': doc.date,
                '_id':doc.noteid
              }
}});

注释。$ ._ id,date和createdBy字段在opertion中被删除。我使用aldeed simple schema和collection 2作为autoForm包的包。但是,此更新是使用带有Meteor.call的通用表单完成的。我正在使用流星1.2.1。我知道集合2默认启用了removeEmptyString设置,这就是为什么我尝试第二种方式,但它仍然不起作用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

你的$套装正在说,"将笔记。$ object分配给这个对象我给你,并删除当前的任何内容。"

你想做类似的事情:

Cases.update( {"_id":doc._id, "notes._id": doc.noteid},
{
  $set:{
    'notes.$.note': doc.note,
    'notes.$.updatedBy': currentUser,
    'notes.$.updatedAt': date
  }
});

我的$ set说,&#34;分配笔记的这三个特定字段。$对象给我提供的价值,而不要触及任何其他内容。&#34; < / p>