【问题标题】:mongodb findUpdateOne replace object with objectmongodb findUpdateOne 用对象替换对象
【发布时间】:2020-10-15 19:31:23
【问题描述】:

需要改变对象值(不是数组) 想用 javascript 对象替换当前的 mongodb 对象。

mongodb 文档示例:

 _id: ObjectId("5ee16596c1583dee0d7a6cae")
   名称:《联合湾》
   代码:“ub”
   配置:对象
      食物:真实
      玩具:真实
      床上用品:真
      书籍:真实
      工具:假
   所有者:“玛丽·史密斯”
]

我得到的是一个配置对象,例如

   food: true
   toys: false
   bedding: false
   books: false
   tools: false

我可以通过在命令行中全部输入来手动使用 updateOne...

db.client.updateOne({"code": "ub"},{$set: {"configs":{"food": true, "toys": false, "bedding": false, "books": false, "tools": false}}})

但在我的 javascript 中,我不想遍历对象。我只想将对象传递给 $set。我试过这个...

configInfo 是像上面这样的对象,所有当前设置都是对象

await Client.findOneAndUpdate(
   {
      code: "ub"
   },
   { $set: { configs: configInfo }},
);

不幸的是,结果...

[
   _id: ObjectId("5ee16596c1583dee0d7a6cae")
   name: "Union Bay"
   code: "ub"
   configs: Object
      food: true
   owner: "Mary Smith"
]

它只更新对象中设置的第一个键/值。当我想要做的实际上是用我的 javascript 对象替换整个 mongodb 对象时。导致这个...

希望的结果是……

[
   _id: ObjectId("5ee16596c1583dee0d7a6cae")
   name: "Union Bay"
   code: "ub"
   configs: Object
      food: true
      toys: false
      bedding: false
      books: false
      tools: false
   owner: "Mary Smith"
]

【问题讨论】:

    标签: javascript reactjs mongodb mongoose


    【解决方案1】:

    使用upsert

    upsert 如果对象不存在则创建它。 https://mongoosejs.com/docs/tutorials/findoneandupdate.html#Upsert

    await Client.findOneAndUpdate(
       {
          code: "ub"
       },
       { $set: { configs: configInfo }},
       { upsert: true }
    );
    

    【讨论】:

    • 不。这产生了与上述结果相同的数据。它只需要首先配置( food: true )并且不提供 DESIRE 中显示的剩余值
    • 尝试 Client.updateOne() 与 upsert true,它应该可以工作 mongoosejs.com/docs/api/model.html#model_Model.updateOne
    • 不幸的是,Nagesh,仍然没有更新任何值,而是对象中的第一个条目。这就是我尝试过的... let theClient = await Client.updateOne( { code: "ub", }, { $set: { configs: configInfo } }, { upsert: true } );
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 2021-05-30
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2021-06-14
    • 2016-10-20
    相关资源
    最近更新 更多