2

特定の値を含むフィールドを持つすべてのオブジェクトを照会したいと思います。たとえば、次の 2 つのドキュメントがあります。

{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}

値が「apple」であるフィールドを持つすべてのオブジェクトを取得したいのですが、フィールドの名前がわかりません。これを達成するためにMongoDBでクエリを指定することは可能ですか? (オブジェクトの数値キーは子 ID であり、オブジェクトの値は長い GUID です)

4

2 に答える 2

6

残念ながら、MongoDB は特定の値を持つすべてのフィールドを照会する方法をサポートしていません。この機能強化を要求する既存の Jira チケットがあります: https://jira.mongodb.org/browse/SERVER-1248。お気軽にコメント、投票、またはそのチケットをフォローしてください。

それまでの間、これを処理する通常の方法は、MongoDB スキーマを変更することです。あなたの例では、既存のスキーマを変更します。

{"123": "apple", "217": "pear", "179": "orange"} 
{"831": "pear", "189": "grapes"} 

そして、あなたはそれを次のように構成するかもしれません:

 { tags: [
        { cid: "123", value: "apple" },
        { cid: "217", value: "pear" },
        { cid: "179", value: "orange" },
      ]
    }
   { tags: [
        { cid: "831", value: "pear" },
        { cid: "189", value: "grapes" },
      ]
    }

これが完了したら、次のクエリを実行して、目的のドキュメントをすべて見つけることができます。

 db.docs.find( {'tags.value': "apple" } )

このスキーマでは、元のスキーマではできない「tags.cid」フィールドと「tags.value」フィールドのインデックスを作成できることに注意してください。

これが役立つことを願っています。

-ウィリアム

于 2012-06-05T19:46:49.227 に答える