У моєму 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
}
)