У меня следующая структура документа:
{
"_id": ObjectId("12345678"),
"name": "object name",
"descriptions": "object description",
"questions": {
"mandatory": [
{
"name": "question name",
"mandatory": true,
"items": [
{
"id": 1,
"name": "option1 value"
}
]
}
],
"optional": [
{
"name": "question name",
"mandatory": false,
"items": [
{
"id": 4,
"name": "option4 value"
}
]
}
]
}
}
В моей коллекции я хочу обновить все документы, в которых есть элемент с определенным идентификатором. Проблема в том, что item
, который я хочу обновить, может отображаться либо под mandatory
, либо под optional
. Прямо сейчас я использую отдельный запрос для обновления элементов в необязательном порядке:
itemCollection.update(
{
'questions.optional':{$exists:true}
},
{
$set:{"questions.optional.$[].items.$[itemField].name":item.name}
},
{
arrayFilters:
[
{"itemField.id": itemId}
],
$multi:true
}, (error) => {
if(!error){
// do something if no error
}
}
)
Затем я использую тот же запрос (с необходимыми изменениями) для обновления элементов в обязательном порядке. Есть ли способ, которым я могу объединить эти два запроса в один, так что если в документе есть элемент с желаемым идентификатором, он будет обновляться независимо от того, является ли он обязательным или необязательным?