Ответ 1
Поскольку у вас есть массив внутри массива, нет никакого простого способа ссылаться на вложенный подмассив, если вы не знаете позицию в массиве, который хотите обновить.
Итак, например, вы можете обновить первый вход для "Svc 1" с эквивалентом С#:
db.services.update(
// Criteria
{
'_id' : ObjectId("505fd43fdbed3dd93f0ae088"),
'services.serviceName' : 'Svc 1'
},
// Updates
{
$set : {
'services.$.input.0.quantity' : 100,
'services.$.input.0.note' : 'Quantity updated to 100'
}
}
)
Если вы не знаете позицию для вложенного массива input
, вам нужно будет выбрать соответствующий services
, перебрать массив input
в код приложения, а затем $set
обновленный массив.
В качестве альтернативы вы можете изменить свой вложенный массив для использования встроенного документа, например:
{
"categoryName" : "Cat 1",
"services" : [
{
"serviceName" : "Svc 1",
"input1" : { "quantity" : 10, "note" : "quantity = 10" },
"input2" : { "quantity" : 20, "note" : "quantity = 20" }
},
]
}
Что вы могли бы затем обновить по имени, например input1
:
db.services.update(
// Criteria
{
'_id' : ObjectId("5063e80a275c457549de2362"),
'services.serviceName' : 'Svc 1'
},
// Updates
{
$set : {
'services.$.input1.quantity' : 100,
'services.$.input1.note' : 'Quantity updated to 100'
}
}
)