1
我有这样一个方案的集合:MongoDB的嵌套查询删除
[
Folder: {
_id: ObjectId(...),
Item: [{
_id: ObjectId(...),
Version: [{
_id: ObjectId(...),
ConfirmedDevices: [ObjectId(...), ...]
}, ...]
}, ...]
}
]
我需要从ConfirmedDevices
阵列的每一个项目的每一个版本去除一定的ID在一定Folder
。换句话说,我有一个folderId,我需要通过选择文件夹。然后我有一个id列表,其中需要从该文件夹中存在的所有已确认设备中删除。
我需要通过C#驱动程序来做到这一点。其实我已经写了这样做的代码,但是这需要查询文件夹中每个项目的每个版本的数据库。这会导致文件夹上的许多项目出现性能问题。
我在说的是这个逻辑,把它当作一个伪代码。
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#版本)
是否有您能详细点什么办法?也许举一个例子吧? –