【发布时间】:2016-11-28 12:02:54
【问题描述】:
我有一个这样的集合:
[
Folder: {
_id: ObjectId(...),
Item: [{
_id: ObjectId(...),
Version: [{
_id: ObjectId(...),
ConfirmedDevices: [ObjectId(...), ...]
}, ...]
}, ...]
}
]
我需要从某个Folder 中每个项目的每个版本的ConfirmedDevices 数组中删除某些特定ID。换句话说,我有一个 folderId 我需要选择文件夹。然后我有一个 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#版本)
【问题讨论】:
标签: c# mongodb nested-queries