найти, обновить и вернуть объект массива внутри документа (mongodb) - PullRequest
0 голосов
/ 02 июля 2018

У меня есть пачка документов в следующем формате:

{
    _id: "5b38c85f213751038ff4d0bb",
    classes: [
      {
        _id: "5b38c85f21375103ytg65ju7",
        standard: "12",
        numberOfStudents: 45
      },
      {
        _id: "5b38c85f2137510370987hgd",
        standard: "11",
        numberOfStudents: 51
      },
    ]
}

Я хочу:

  1. Поиск в коллекции документов по _id и определенному классу _id.
  2. Обновите numberOfStudents для этого класса.
  3. Возвращать только объект класса.

Так что для _id: "5b38c85f213751038ff4d0bb" & classes._id: "5b38c85f21375103ytg65ju7", обновление numberOfStudents: 43, результат, который я ожидаю, будет:

{
  _id: "5b38c85f21375103ytg65ju7",
  standard: "12",
  numberOfStudents: 43
}

Я попробовал пару вещей, но все они возвращают весь документ, но не так, как я хочу.

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете попробовать ниже агрегации

db.collection.aggregate([
  { "$match": { "_id": "5b38c85f213751038ff4d0bb" }},
  { "$addFields": {
    "classes": {
      "$filter": {
        "input": "$classes",
        "as": "class",
        "cond": {
          "$eq": [
            "$$class._id",
            "5b38c85f21375103ytg65ju7"
          ]
        }
      }
    }
  }},
  { "$unwind": "$classes" },
  { "$replaceRoot": { "newRoot": "$classes" }},
  { "$project": {
    "_id": 1,
    "numberOfStudents": { "$literal": 43 },
    "standard": 1
  }}
])

выход

[
  {
    "_id": "5b38c85f21375103ytg65ju7",
    "numberOfStudents": 43,
    "standard": "12"
  }
]

Попробуйте здесь

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