【问题标题】:Mongo using set instead of $setMongo 使用 set 而不是 $set
【发布时间】:2016-06-04 19:33:44
【问题描述】:

我正在使用 Meteor 并且正在更新文档并且有代码(错误地):

Programs.update({ _id: id}, { set: { LessonWk1: weekArray }});

代替:

Programs.update({ _id: id}, { $set: { LessonWk1: weekArray }});

结果当我使用“设置”时,它在更新运行时删除了文档。我在 Mongo 中没有看到任何“设置”命令。只是好奇文档是如何从“集合”中删除的。

【问题讨论】:

  • 您确定文档已被删除,而不是简单地更改为{ set: { LessonWk1: weekArray }}
  • 可能是这样,虽然我不确定如果有的话要搜索什么。

标签: mongodb meteor mongodb-query


【解决方案1】:

这是documentation 中提到的预期行为:

如果文档只包含 field:value 表达式,那么:

update() 方法用文档替换匹配的文档。 update() 方法不会替换 _id 值。

这意味着您的文档被替换为如下所示:

{ _id: id, set: { LessonWk1: weekArray }}

因为它不会替换 _id 值,所以您可以使用 findOne 返回新文档。

Programs.findOne( { _id: id } )

【讨论】:

  • 但我不是必须知道 id 是什么才能找到它吗?
  • @MatthewMoon “id”与您在“update”方法中使用的相同。
  • 是的,但是当用户单击由#each 迭代创建的名称文档列表时,从单击侦听器中获取了“id”,该迭代获取了传递给更新的“this._id”方法。由于该文档已从列表中删除,看来我现在必须知道 _id 属性的值才能搜索它。
  • 您可以通过Programs.find({set: {$exists: 1}})找到所有受影响的文档
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 2013-10-21
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多