0

配列のマッキングサブドキュメントをクエリしたいとき、私はいつも同じことに直面しています。

以下のようなコレクションがあるとしましょう。

{ 
  "_id" : 1, 
  "value" : 5, 
  "array" :[ {"name" : "John", "born" : ISODate("1980-04-17T13:11:54Z"),  "hasACar" : false}, 
             {"name" : "Alice", "born" : ISODate("1985-04-17T13:11:54Z"), "hasACar" : false},
             {"name" : "Jordan", "born" : ISODate("1980-05-19T104:11:54Z"), "hasACar" : true} ] 
}

{
  "_id" : 2, 
  "value" : 3, 
  "array" :[ {"name" : "Neil", "born" : ISODate("1985-11-14T16:11:54Z"), "hasACar" : false}, 
             {"name" : "Marin", "born" : ISODate("1987-08-17T13:15:00Z"), "hasACar" : false}] 
}

{ 
  "_id" : 3, 
  "value" : 7, 
  "array" :[ {"name" : "Micheal", "born" : ISODate("1975-04-17T13:11:54Z"), "hasACar" : false},
             {"name" : "Lisa", "born" : ISODate("1985-04-17T13:11:54Z"), "hasACar" : true}, 
             {"name" : "Pascal", "born" : ISODate("1965-05-19T104:11:54Z"), "hasACar" : false} ] 
}

{
  "_id" : 4, 
  "value" : 1,
  "array": [ {"name" : "Dave", "born" : ISODate("1980-04-17T13:11:54Z"), "hasACar" : true}, 
             {"name" : "Paul", "born" : ISODate("1985-04-17T13:11:54Z"), "hasACar" : false}, 
             {"name"  :"Chuck", "born" : ISODate("1980-05-19T104:11:54Z"), "hasACar" : true} ]
}

一致するサブドキュメントのみを含むすべてのドキュメントを取得したいと思います。基準は 1979 年以降に生まれ、hasACar は false です。これは、var を持ち、1979 年より前に生まれた人を除外し、ドキュメントを返すことを意味します。

Aggregation フレームワークでこの計算を行うことができますが、aggregation または mapreduce を使用せずにそれを行う別の方法があることに興味があります。

クエリ時に射影の場合に $elemMatch 演算子を使用しようとしましたが、最初に一致したサブドキュメントのみを含むドキュメントが返されます。

ヘルプやアドバイスをいただければ幸いです。

どうも。

4

0 に答える 0