繁体   English   中英

MongoDB更新嵌套数组元素

[英]MongoDB update nested array elements

我有以下结构:

{
    id: "1",
    invoices: [{ id: "1", balance: 1},{ id: "2", balance: 1}]
},
{
    id: "2",
    invoices: [{ id: "3", balance: 1},{ id: "4", balance: 1}]
}

我得到了我不应该更新的发票ID列表,其余的我需要将余额更新为0。

我对MongoDB还是很陌生,并且设法找到一种方法来做到这一点。

首先,您忘记了字段名称周围的引号。 您的文件应如下所示:

{
    "id": "1",
    "invoices": [{
        "id": "1",
        "balance": 1
    }, {
        "id": "2",
        "balance": 1
    }]
}

我在本学期在大学学习时,对MongoDB的经验有限。 但是,这是我的解决方案:

db.collection.update(
    { id: "1" },
    {
        $set: {
            "invoices.0": { id: "1", balance: 0 }
        }
     }
)

该解决方案有什么作用?

  1. 它使用ID为1的文档。这是您的第一个文档。
  2. $ set运算符用指定的值替换字段的值。 (直接从MongoDB手册-MongoDB手册-$ set运算符 )。
  3. “ invoices.0”从invoices数组中获取第一个发票,然后将余额更新为100。
  4. 用您的集合名称替换db.collection中的单词collection。

尝试看看是否可行。 如果没有,我希望有更多经验的人来纠正我。

LE:现在可以了,尝试看看。

假设您要更新ID为1的所有发票,但invoice.id 2除外,请尝试以下操作:

db.collection.update(
{ id: "1", "invoices.id": {$ne: 2} },
{
    $set: {
        "invoices.$[]": { balance: 0 }
    }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM