gpt4 book ai didi

mongodb - 如何在 MongoDB 的嵌入式文档/数组中更新/设置/取消设置键?

转载 作者:可可西里 更新时间:2023-11-01 09:14:37 26 4
gpt4 key购买 nike

我正在尝试取消设置嵌入在数组中的文档中的所有值。假设我有一个包含数组 things 的集合 coll,其中包含一个值 myval。我想取消设置 myval。这看起来像:

{ things: [{ myval: 1 }, { myval: 2 }] }

我都试过了

db.coll.update({}, {$unset: {'things.myval': 1}})

db.coll.things.update({}, {$unset: {'myval': 1}})

这些都不起作用。我在网上找不到任何描述如何执行此操作的文档。

最佳答案

我遇到了这个,很沮丧地看到唯一的方法是使用嵌套的 forEach。所以经过一番搜索,我找到了另一种方法!自 mongo 版本 3.6 以来,有一个 all positional operator ($[])(3.6 版是在这个问题被问到之后引入的……甚至在它上次激活之后,但以防其他人遇到这个问题)

要从要匹配的第一个嵌入文档中删除列 myval,请执行以下操作:

db.coll.update(
{things: {'$exists': true}},
{$unset: {'things.$[].myval': 1}}
)

或者如果您想从所有匹配的文档中删除它,请使用 updateMany

db.coll.updateMany(
{things: {'$exists': true}},
{$unset: {'things.$[].myval': 1}}
)

$unset 只会在值存在时编辑它,但它不会进行安全导航(即它不会先检查它是否存在),因此嵌入文档/数组需要存在.

关于mongodb - 如何在 MongoDB 的嵌入式文档/数组中更新/设置/取消设置键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7758948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com