Пн go Обновление запроса на совпадение значений индекса массива - PullRequest
0 голосов
/ 11 февраля 2020

student коллекция выглядит следующим образом.

[{
    "_id" : NumberLong(1),
    "studentId" : "70133",
    "subjects" : [ 
        "Mathematics", 
        "Biology and Zoology"
    ]
},
{
    "_id" : NumberLong(2),
    "studentId" : "70134",
    "subjects" : [ 
        "Mathematics", 
        "English"
    ]
},
{
    "_id" : NumberLong(3),
    "studentId" : "70135",
    "subjects" : [ 
        "English", 
        "Mathematics",
        "Chemistry"
    ]
}]);

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

  • Если предмет соответствует English должно быть обновлено до ENG
  • Если субъект соответствует Biology и Zoology, должно быть обновлено до BAZ
  • Если тематические совпадения Mathematics должны быть обновлены до MAT
  • Если тематические совпадения Chemistry должны быть обновлены до CHM

После обновления документы должны выглядеть следующим образом. Как мне этого добиться.

[{
    "_id" : NumberLong(1),
    "studentId" : "70133",
    "subjects" : [ 
        "MAT", 
        "BAZ"
    ]
},
{
    "_id" : NumberLong(2),
    "studentId" : "70134",
    "subjects" : [ 
        "MAT", 
        "ENG"
    ]
},
{
    "_id" : NumberLong(3),
    "studentId" : "70135",
    "subjects" : [ 
        "ENG", 
        "MAT",
        "CHM"
    ]
}]);

1 Ответ

0 голосов
/ 11 февраля 2020

Это должно быть сделано с несколькими обновлениями, такими как:

db.collection.update(
    { "subjects" : { $in : [ "Mathematics" ] } },
    { $set: { "subjects.$" : "MAT" } },
    { multi: true }
)

См. Эту страницу для получения дополнительной информации об обновлении нескольких документов

, если multi При значении true метод db.collection.update () обновляет все документы, соответствующие критериям. Операция обновления multi может чередоваться с другими операциями чтения / записи.

https://docs.mongodb.com/master/reference/method/db.collection.update/index.html#multi -параметр

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