0

当我想查询数组的 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 年以后出生,hasACar 为 false,表示省略有 var 且出生于 1979 年以前的人,然后返回文件。

我可以使用聚合框架进行此数学计算,但我很好奇是否有另一种方法可以在不使用聚合或 mapreduce 的情况下进行计算。

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

任何帮助或建议表示赞赏。

谢谢。

4

0 回答 0