У меня есть документ:
{
"_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
не соответствует
Любая помощь будет принята с благодарностью. :)