MongoDB更新嵌套数组元素

时间:2018-11-30 12:00:56

标签: arrays mongodb mongodb-query

我具有以下结构:

{
    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还是很陌生,并且设法找到一种方法。

2 个答案:

答案 0 :(得分:0)

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

{
    "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 Manual - $set operator)。
  3. “ invoices.0” 从invoices数组中提取第一张发票,然后将余额更新为100。
  4. 用您的集合名称替换db.collection中的单词集合。

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

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

答案 1 :(得分:0)

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

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