この種のドキュメントが構造化されているとしましょう。属性フィールドは埋め込みドキュメントになり、すでに attributes.key と attributes.value にインデックスを付けています
1-------------------------------------------------------------------------------------
{
"_id" : ObjectId( "5191d8e5d00560402e000001" ),
"attributes" : [
{ "key" : "pobox","value" : "QaKUWo" },
{ "key" : "city", "value" : "CBDRip" },
{ "key" : "address","value" : "zmycAa" } ],
"email" : "FWAUdl_2@email.com",
"firstname" : "FWAUdl_2"
}
2-------------------------------------------------------------------------------------
{
"_id" : ObjectId( "5191d8e7d00560402e000055" ),
"attributes" : [
{ "key" : "pobox", "value" : "sNFriy" },
{ "key" : "city", "value" : "JPdVrI" },
{ "key" : "address", "value" : "phOluW" } ],
"email" : "hqYNWH_86@email.com",
"firstname" : "hqYNWH_86"
}
私の問題は、属性フィールドのみに基づいてクエリを実行するときに正確なドキュメントを取得する方法です。
db.app.find({ attributes.key:address , attributes.value:/.*uw.*/i })
クエリの結果は期待どおりではありません。最初のドキュメントがなく、2 番目のドキュメントのみが返されるはずです。私はattributes.valueに正規表現を入れたことを知っています。アドレス値を持つattributes.keyのみをチェックすることを期待していました。
そして、次のような別のキーをフィルタリングしたい場合はどうなりますか?
db.app.find({ attributes.key:address , attributes.value:/.*uw.*/i , attributes.key:city , attributes.value:/.*ri.*/i })
どんな意見も参考になります。どうも。