当我想查询数组的 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 运算符,但它返回的文档只有第一个匹配的子文档。
任何帮助或建议表示赞赏。
谢谢。