【问题标题】:MongoDB: Replace object in arrayMongoDB:替换数组中的对象
【发布时间】:2020-11-08 06:51:38
【问题描述】:

我正在尝试将数组中的整个对象替换/更新为它的最新值,但我无法让它工作。

Db 看起来像这样:(注意:这个集合中只有 1 个主要对象)

    {
        "_id": {...},
        "something that doesnt matter": {...},
        "var1": {
            "var2": [{...}, {...}, {...}, {...}, {...}],
            "var3": [{...}, {...}, {...}, {...}, {...}]
        },
        "something that doesnt matter": {...}
    }

我需要从数组 var2 更新某个对象,我有对象 ID 或者对象中有自定义 ID,我也可以使用 (id == updatedObject.id) 获取它

这可行,但我无法让它与自定义数组 id 一起使用

await db.collection("collectionName").findOneAndUpdate(
    {"var1.var2": { $exists: true }},
    { $set: { "var1.var2.1": updatedObject } }
);

我已经在数据库上的数组中拥有对象的 ID,但我不知道如何从 var1.var2 更新它。ID

所以基本上我需要的是{ $set: { "var1.var2.**ID**": updatedObject } },但我似乎不知道如何让它工作。

因为我不想更新整个数组,也不想更新对象中的单个变量。我需要更新整个对象。

提前感谢您的回复。

【问题讨论】:

标签: node.js mongodb typescript


【解决方案1】:

你有没有尝试过以下方法

await db.collection("collectionName").findOneAndUpdate(
  {
    "var1.var2.id": id // id value (or any matching field) of object inside array you want to update
  },
  {
    $set: {
      "var1.var2.$": updatedObject // Update with new object
    }
  }
);

希望这个official mongodb documentation 能更好地满足您的要求。

【讨论】:

  • 它总是用那个更新第一个元素,即使那不是正确的元素。
  • 即使在查找查询 "var1.var2.id": id 中添加了精确的 id 匹配后?
  • prntscr.com/tkb05f 如你所见,我什至用字符串来确保它是正确的,但它仍然总是在数组中的第一个元素。
  • yerp 找到它,它返回 c 的整个对象
  • :clap: :clap: 成功了!等待 db.collection("collectionName").findOneAndUpdate( {"var1.var2.id": id}, { $set: { "var1.var2.$": updatedObject } } );
【解决方案2】:

对不起,我无法发表评论,但上面的答案几乎是正确的,除了你必须过滤 var1.var2._id 而不是 var1.var2.id 因为 mongodb 默认 ID 字段是 _id

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2016-10-01
    • 2020-10-15
    • 2020-01-09
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2020-11-16
    • 2018-10-03
    相关资源
    最近更新 更多