查找只与匹配的子文档MongoDB匹配的文档

时间:2014-09-18 20:33:33

标签: arrays mongodb find matching subdocument

当我想查询数组的macting子文档时,我总是面对同样的事情。

让我想我有一个如下的集合:

{ 
  "_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年之后诞生的,并且有一个错误,这意味着省略了拥有var并且在1979年之前出生的人,然后返回文件。

我可以用聚合框架制作这个东西,但我很好奇是否有另一种方法可以在不使用聚合或mapreduce的情况下制作它。

我在查询时尝试在投影案例中使用$ elemMatch运算符,但它返回的文档只有第一个匹配的子文档。

感谢任何帮助或建议。

THX。

0 个答案:

没有答案