在发布这个问题之前,我进行了彻底的研究,但是我没有找到一个准确的解决方案。我有以下结构:
stname: "SC",
dob : "1985",
education {[
{name : Lancaster,
year : 2013},
{name : Manchester,
year : 2001,
grad : 2004},
{name : Gambia,
year : 2001,
grad : 2011}
]}
我希望只返回具有grad字段的文档,因此最后两个文档应该被返回。
我尝试了以下查询但没有成功。
db.applicants.find({"education" : { $elemMatch : {"grad" : {$exists : true}}}}, {"name":1, "education.grad" : 1}).pretty()
只返回第一个匹配项,如下所示,第一个文档为空
{
"_id" : ObjectId("574dd5fcbda73af19e361a3f"),
"name" : "SC",
"education" : [
{
},
{
"grad" : "2004"
},
{
"grad" : "2011"
}
]
}
此外,下面的查询将为您提供类似的结果,即在不存在 grad 字段的地方生成一个空文档。
db.applicants.find({"education.grad" : { $exists : true}}, {"education.grad" : {$exists : true}, "education.grad" : 1, name : 1 , dob : 1}).pretty()