У меня есть коллекция с схемой, как это:MongoDb вложенный удалить запрос
[
Folder: {
_id: ObjectId(...),
Item: [{
_id: ObjectId(...),
Version: [{
_id: ObjectId(...),
ConfirmedDevices: [ObjectId(...), ...]
}, ...]
}, ...]
}
]
Мне нужно удалить некоторые определенные идентификаторы из ConfirmedDevices
массива каждой версии каждого элемента в определенном Folder
. Другими словами, у меня есть папка, для которой мне нужно выбрать папку. Затем у меня есть список id, который должен быть удален со всех подтвержденных устройств, существующих в этой папке.
Мне нужно сделать это над драйвером C#. На самом деле я уже написал код, который делает это, но для этого требуется сделать запрос к db для каждой версии каждого элемента в папке. И это приводит к проблемам с производительностью в случае многих элементов в папке.
Логика того, что я говорю, это, воспринимайте это как псевдокод.
for (int i = 0; i < folder.items.Count; i++)
{
for (int j = 0; j < item.versions.Count; j++)
{
db.folders.update(
{"_id": ObjectId("...") },
{ $pull: { "Items." + i + ".Versions." + j + ".ConfirmedDevices": { $in: [ ObjectId("...") ] } } },
{ multi: true }
);
}
}
Я знаю, что вложенные запросы mongodb находятся на темной и плохой стороне концепции. Но я не могу подтвердить, что это невозможно.
Есть ли в любом случае, что я могу добиться этого на ходу? (обычного запроса mongodb будет достаточно, я могу преобразовать его в версию C#)
Есть ли способ, вы можете уточнить? Может быть, запустите пример? –