現在のスキーマでこれをエレガントに解決できるかどうかはわかりません。 slotTypes
$elemMatch
を許可するサブドキュメントの配列である必要があります 動作するクエリ。今のところ、それは数字っぽいキーを持つオブジェクトです。
つまり、ドキュメントスキーマは次のようになります。
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
データレイアウトを変更することができない場合は、基本的にすべてのドキュメントをスキャンして、$where
と一致するものを見つける必要があります。 。これは遅く、インデックスに登録できず、扱いにくいです。
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
$whereのドキュメント をお読みください。 その警告を確実に理解し、聖なるものすべてを愛するために、関数への入力をサニタイズします。これは、データベースのコンテキストで実行されているライブコードです。