にネスト:MongoDBは私はこのようなスキームのコレクションを持って削除クエリ
[
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#版に変換できます)
欲しいものを達成することができるようになります引っ張ると組み合わせて、このあなたが手の込んだことができますどのような方法がありますか?たぶん事例を起こす? –