Обновить переменные поля документа - PullRequest
0 голосов
/ 06 мая 2020

У меня есть документ:

{
        "_id" : ObjectId("5eaa5fd865ee7ee63dafb93b"),
        "RId" : 501,
        "details" : [
                {
                        "code" : "code1",
                        "list" : [
                                {
                                        "name" : "first",
                                        "ip" : [
                                                "1.1.1.1",
                                                "2.2.2.2",
                                                "128.2.1.2",
                                                "127.2.1.2",
                                                "128.2.1.4"
                                        ]
                                },
                                {
                                        "ip" : [ ],
                                        "name" : "second"
                                }
                        ],
                        "currentFeed" : "test1",
                        "hostName" : "xyz",
                        "password" : "yyz",
                        "ip" : "3.132.76.51"
                },
                {
                        "code" : "code2",
                        "list" : [
                                {
                                        "name" : "third",
                                        "ip" : [
                                                "3.3.3.3",
                                                "4.4.4.4",
                                                "128.2.1.6"
                                        ]
                                }
                        ],
                        "currentFeed" : "test2",
                        "hostName" : "wsd",
                        "password" : "dsas",
                        "ip" : "3.132.76.52"
                }
        ]
}

Мне нужно обновить документ:

if(Rid==my_id){
 if(`details.code`==my_code){
   if('details.list.name'==my_name){
     add to the `details.list.ip` array
   }else{
     add in the `details.list` array.
   }
 }else{
  add it in the `details` array.
 }
}else {
 create new document.
}

Я могу обновить массив details.list.ip на условиях, используя оператор позиции в фильтре массива. Но он не работает, когда мне нужно обновить массив details.list или details или если в коллекции для этого RId ничего нет, вставьте его.

Обновить

Например:


, если я получаю запрос с таким документом, как:

      {
        "RId" : 501,
        "details" : [
                {
                        "code" : "code1",
                        "list" : [
                                {
                                        "name" : "first",
                                        "ip" : [
                                                "192.4.2.3"
                                        ]
                                }
                        ],
                        "currentFeed" : "test1",
                        "hostName" : "xyz",
                        "password" : "yyz",
                        "ip" : "3.132.76.51"
                }
             ]
       }

Он должен обновить details.list.ip для details.list.name:"first".

Как RId сопоставлено, details.code сопоставлено и details.list.name тоже сопоставлено.


Или, если я получу запрос, например:

     {
        "RId" : 501,
        "details" : [
                {
                        "code" : "code1",
                        "list" : [
                                {
                                        "name" : "sixth",
                                        "ip" : [
                                                "192.16.3.2"
                                        ]
                                }
                        ],
                        "currentFeed" : "test1",
                        "hostName" : "xyz",
                        "password" : "yyz",
                        "ip" : "3.132.76.51"
                }
             ]
           }

Должен обновите массив details.list с информацией о коде2

Поскольку RId сопоставлено, details.code сопоставлено, но details.list.name не сопоставлено.


Или, если я получу запрос типа:

     {
        "RId" : 501,
        "details" : [
                {
                        "code" : "code3",
                        "list" : [
                                {
                                        "name" : "fourth",
                                        "ip" : [
                                                "192.168.3.2"
                                        ]
                                }
                        ],
                        "currentFeed" : "test1",
                        "hostName" : "xyz",
                        "password" : "yyz",
                        "ip" : "3.132.76.51"
                }
             ]
           }

Он должен обновить массив details информацией code3

Как RId сопоставлено, но details.code не сопоставлено.


Или, если запрос получает документ:

      {
        "RId" : 500,
        "details" : [
                {
                        "code" : "code5",
                        "list" : [
                                {
                                        "name" : "fifth",
                                        "ip" : [
                                                "128.2.1.4"
                                        ]
                                }
                        ],
                        "currentFeed" : "test1",
                        "hostName" : "xyz",
                        "password" : "yyz",
                        "ip" : "3.132.76.51"
                }
             ]
           }

Он должен создать новый документ, поскольку RId:500 отсутствует в коллекции.

Как Rid не соответствует

Любая помощь будет принята с благодарностью. :)

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