web-dev-qa-db-ja.com

クエリのキーに含まれるMongoDBワイルドカード

クエリでキーをワイルドカードにすることはできますか?たとえば、次のレコードを前提として、.find({'a.*': 4})を実行したいと思います。これについては、ここで説明しました https://jira.mongodb.org/browse/SERVER-267 しかし、解決されていないようです。

{
  'a': {
    'b': [1, 2],
    'c': [3, 4]
  }
}
33
Brad

尋ねられたように、これは不可能です。リンクしたサーバーの問題はまだ"不明な問題"の下にあります。

MongoDBには配列の使用を取り巻く知能があり、それはそのような機能を取り巻く複雑さの一部だと思います。

次のクエリdb.foo.find({ 'a.b' : 4 } )を取ります。このクエリは、次のドキュメントに一致します。

_{ a: { b: 4 } }
{ a: [ { b: 4 } ] }
_

では、「ワイルドカード」はここで何をするのでしょうか。 db.foo.find( { a.* : 4 } )最初のドキュメントと一致しますか? 2番目はどうですか?

さらに、これは意味的にどういう意味ですか?すでに説明したように、クエリは事実上"ドキュメント内のフィールドに4の値があるドキュメントを検索する"です。それは少し珍しいです。

あなたが達成しようとしている特定のセマンティクスはありますか?おそらく、ドキュメント構造を変更すると、必要なクエリが得られるでしょう。

11
Gates VP