2016-11-16 7 views
0

MongoDBの$演算子にサブ文書を含むコレクションがあります。私は流星を使用していると私はこのようになりますコレクションがあります。復帰にMeteorを使用してサブ文書の特定のフィールドを返す

{ 
    "_id": "A", 
    "data_fields": [ 
     {name: "artist", value: "Nirvana"}, 
     {name: "album", value: "Smells Like"}, 
     {name: "random_fieldname1", value: "random_value1"}, 
    ] 
}, 
{ 
    "_id": "B", 
    "data_fields": [ 
     {name: "artist", value: "The Strokes"}, 
     {name: "album", value: "Room on Fire"}, 
     {name: "random_fieldname2", value: "random_value2"}, 
    ] 
} 

私は「アーティスト」または「アルバム」のいずれかに対応する値に文字列に一致するクエリを作成したい、をそれらの2つのフィールドのみ(上の例では「ランダム」のフィールドではありません)。例えば

I入力「涅槃」または「匂い」場合、出力は次のようにすべきである:

{ 
     "_id": "A", 
     "data_fields": [ 
      {name: "artist", value: "Nirvana"}, 
      {name: "album", value: "Smells Like"}, 
     ] 
    } 

(名=「random_fieldname1」の配列要素がであってはならないことに注意してください出力)。

これは可能ですか?可能であれば、私は集約フレームワークの使用を避けたいと考えています。

ありがとうございます。

+0

をしてください、これまでに試したことを投稿に追加してください。 – Veeram

+0

あなたの流星コードを投稿して、クエリを構築してください。 –

+0

申し訳ありませんが、私は何をしようとしていたが、私は本当にどこにもいませんでした。 @satishchennupatiのコードはほとんど仕事を終えましたが、アルバムフィールドで配列要素を表示しません。 – user3856970

答えて

1

次のクエリは、

db.aaa.find({"data_fields.value":"Nirvana"},{"data_fields.$":1}) 

iはMongoDBの

{ 
     "_id" : "A", 
     "data_fields" : [ 
       { 
         "name" : "artist", 
         "value" : "Nirvana" 
       }, 
       { 
         "name" : "album", 
         "value" : "Smells Like" 
       }, 
       { 
         "name" : "random_fieldname1", 
         "value" : "random_value1" 
       } 
     ] 
} 
{ 
     "_id" : "B", 
     "data_fields" : [ 
       { 
         "name" : "artist", 
         "value" : "The Strokes" 
       }, 
       { 
         "name" : "album", 
         "value" : "Room on Fire" 
       }, 
       { 
         "name" : "random_fieldname2", 
         "value" : "random_value2" 
       } 
     ] 
} 

に、次のと私が返されます上記のクエリを実行している考えるだけ一致するサブドキュメントが返されます:

{ 
"_id" : "A", 
"data_fields" : [ 
{ "name" : "artist", 
"value" : "Nirvana" } ] 
} 
+0

ありがとう!これはうまく見えますが、サンプル出力のようにアルバムを返す方法はありますか? – user3856970

+0

「Nirvana」で検索すると、アーティストとアルバムの両方のレコードが必要になりますが、ランダムなものは除外されます。右 ? –

+0

まさに!それは実践ですか? – user3856970

関連する問題