MongoDB обновляет вложенные элементы массива - PullRequest
0 голосов
/ 30 ноября 2018

У меня следующая структура:

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

Я получаю список идентификаторов счетов, которые мне не следует обновлять, а остальное мне нужно обновить баланс до 0.

Я довольно новичок в MongoDB, и мне удается найти способ сделать это.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Допустим, вы хотите обновить все счета с идентификатором 1, кроме invoice.id 2, попробуйте это:

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

)

0 голосов
/ 30 ноября 2018

Прежде всего, вы забыли кавычки вокруг имен полей.Ваши документы должны быть такими:

{
    "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. Он принимает документ с идентификатором 1. Это ваш первый документ.
  2. Оператор $ set заменяет значение поля указанным значением.(прямо из руководства MongoDB - Руководство MongoDB - оператор $ set ).
  3. "invoices.0" получает первый счет из массива invoices, а затемобновляет баланс до 100.
  4. Замените коллекцию слов из db.collection именем вашей коллекции.

Попробуйте и посмотрите, работает ли он.Если нет, я бы хотел, чтобы кто-то с большим опытом поправил меня.

LE: Теперь это работает, попробуйте и посмотрите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...