我正在处理需要更新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设置,这就是为什么我尝试第二种方式,但它仍然不起作用。有人可以帮忙吗?
答案 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>