为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB UpdateOne 不更新记录

MongoDB UpdateOne 不更新记录

C#
暮色呼如 2021-06-02 17:50:23
尝试更新单个记录时,我遇到了非常奇怪的行为。我使用 UpdateOne() 方法,它在 99% 的情况下按预期工作,但有时我会得到以下结果:如您所见,MongoDB 能够找到我的记录,但它没有更新。我试图改变写关注,根据文档,这可能会有所帮助:collection.WithWriteConcern(WriteConcern.WMajority.With(journal: true))但它没有。以下是我更新记录的方法:collection.UpdateOne(x => x.Id == _myObject.Id.AsObjectId, updateDef);更新定义:var updateDef = new UpdateDefinitionBuilder<IndexedProfileData>().Set(x => x.Property.ChildCollection, newCollection);如果有人能向我解释为什么会发生这种情况以及如何解决这种行为,我将不胜感激。
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

如果文档已经处于“更新”状态,MongoDB 将不会更新它。


例如,使用mongo外壳:


> db.test.find()

{"_id": 0, "a": 0}


> db.test.update({_id:0}, {$set:{a:1}})

WriteResult({

  "nMatched": 1,

  "nUpserted": 0,

  "nModified": 1

})

由于a是0并且我们设置a为1,因此更新修改了文档 ( nMatched: 1, nModified: 1)。


> db.test.find()

{"_id": 0, "a": 1}


> db.test.update({_id:0}, {$set:{a:1}})

WriteResult({

  "nMatched": 1,

  "nUpserted": 0,

  "nModified": 0

})

如果我们再次尝试设置a为1,则更新语句找到了该文档,但意识到它不需要做任何工作 ( nMatched: 1, nModified: 0)。


查看完整回答
反对 回复 2021-06-05
  • 1 回答
  • 0 关注
  • 464 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信