/ / Mongo DB-додавання об’єкта Json до існуючого документа без створення нового запису (не масиву) - json, mongodb

Mongo DB додає об'єкт Json до існуючого документа без створення нового запису (не масиву) - json, mongodb

У моєму mongodb є об’єкт Json, який уже вставлений.

 {
"appname":"abcd",
"appId":"E3456",
"modules":{
"sales":{
"apis":{
"get all sales":{
"method":"get",
"access_ctrl_level":"admin",
"req_fields":[

],
"url":"url_to_api",
"error_code":[
{
"code":502,
"desc":"no authentication"
}
]
}
}
}
}
}

Тепер я хочу додати ще один об'єкт до "sales.apis".

 "get sales details":{
"method":"get",
"access_ctrl_level":"admin",
"req_fields":[
"saleNo"
],
"url":"url",
"error_code":[
{
"code":502,
"desc":"no authentication"
}
]
}

Я використовував наведений нижче код для пошуку та модифікації документа, щоб вставити цей новий об’єкт до колекції

db.MetaData.findAndModify({query: { $and:[{modules:{sales:{apis:{"get all sales":{method:"get"}}}}},{"appname":"erp"}] },
update: {$set:{modules:{sales:{apis:{"get sales details":{method:"post","access_ctrl_level":"admin","url":"url"}}}}}},
upsert: true
})

Але це створює новий запис у документі MetaData. Але я хочу вставити це під "модулі.apis.get деталі продажу" в тому ж документі Будь-яка ідея?

Відповіді:

0 для відповіді № 1

Будь ласка, спробуйте це зробити до кінця dot notation

Щоб отримати доступ до поля вбудованого документа за допомогою dot-notation, об'єднайте ім'я вбудованого документа в dot (.) і ім'я поля, і в лапки додайте:

findAndModify({
query: { "modules.sales.apis.get all sales.method":"get",
"appname":"erp"} ,
update: {
$set:{"modules.sales.apis.get sales details":
{"method":"post",
"access_ctrl_level":"admin",
"url":"url"}}},
upsert: true
})

0 для відповіді № 2

Як я бачив у вашому запиті, ви ввели неправильне appName, я думаю, ви маєте на увазі "abcd" замість "erp".

.findAndModify(
{
"query": {
"modules.sales.apis.get all sales.method": "get",
"appname": "abcd"
},
"update": {
"$set": {
"modules.sales.apis.get sales details": {
"method": "post",
"access_ctrl_level": "admin",
"url": "url"
}
}
},
"upsert": true
}
)