MongoDB 3.2 - updateOne的用例通过findOneAndUpdate

Nic*_*eda 13 mongodb

我对当天的好奇心之一.

我意识到findOneAndUpdate确保了原子操作,所以我假设updateOne没有.

但我真的不知道避免原子的巨大好处可能超过花费额外时间推理和检查更新是否是原子的成本.

一些见解或用例示例会很棒!

Ily*_*lya 18

我意识到findOneAndUpdate确保了原子操作,所以我假设updateOne没有.

你为什么这么认为?

findOneAndUpdate返回一个文档,updateOne没有(如果它创建了一个新文档,它只返回id).我认为这是主要区别.因此用例updateOne是当您不需要文档并希望节省一点时间和带宽时.

  • @NickPineda IMO你说你的命名不是很好(而且**不是**"英语作为第二语言"的问题).`findOneAndUpdate`并不意味着返回文档,应该是`updateAndFetch`或者什么.是的,驱动程序文档缺乏. (5认同)
  • 不,它不会返回“修改后的”`_id`。唯一一致返回的是“WriteResult”,它具有指示有多少匹配和有多少更新的指示符。只有使用“upsert”选项才会返回“插入的 id”。 (3认同)
  • @BlakesSeven 是的,它并不*总是*重新调整 id,但重点是它不返回文档(因此发送较少的数据)。注意,我已经在答案中添加了精度。 (2认同)
  • @Ilya我以为原子部分是关键区别,因为这就是描述所给我的全部。他们俩都将返回值描述为“承诺”,在我看来,这使得通过阅读文档来建立直觉非常困难。 (2认同)