Монго БД не обновляет документ с $ set - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть этот документ в БД

{
    "_id" : "jpC6fH4xNSY8DFsHd",
    "result" : [
        {
            "form": 2,
            "term" : 1,
            "Mathematics" : {

                "exam" : 15,
                "project" : 22

            },
            "Physics" : {
                "exam" : 15,
                "project" : 22
            },
            "Chemistry" : {
                "exam" : 15,
                "project" : 22
            }
        },
        {
            "form": 3,
            "term" : 1,
            "Mathematics" : {

                "exam" : 15,
                "project" : 22

            },
            "Physics" : {
                "exam" : 15,
                "project": 22
            },
           //I want to add chemistry here!
        },

    ]
}

Я хочу обновить объект "Химия" в документе, где result.form: 3 и result.term: 1, но не будет обновляться.Я заметил, что он обновляет "result.form": 2 и "result.term": 1

db.results.update({_id:'jpC6fH4xNSY8DFsHd','result.term':1,'result.form':3},{$set:{'result.$.Chemistry':{exam:12,position:33}}})

Я использую версию оболочки MongoDB: 3.2.15 для Linux Mint 18.1

1 Ответ

0 голосов
/ 21 декабря 2018

1) Вам нужно использовать $elemMatch для сопоставления нескольких полей внутри массива и

2) Для обновления полей внутри имеющегося у вас объектаиспользовать .dot запись

db.results.update(
  { "_id": "jpC6fH4xNSY8DFsHd",
    "result": { "$elemMatch": { "term": 1, "form": 3 }}
  },
  { "$set": {
    "result.$.Chemistry.exam": 12,
    "result.$.Chemistry.position": 33
  }}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...