MongoDB 查询子文档数组
MongoDB query array of subdocuments
在发布这个问题之前,我已经仔细研究过,但找不到准确的解决方案。
我有以下结构
stname: "SC",
dob : "1985",
education {[
{name : Lancaster,
year : 2013},
{name : Manchester,
year : 2001,
grad : 2004},
{name : Gambia,
year : 2001,
grad : 2011}
]}
所以我只想 return 具有毕业字段的文档。所以最后两个文件应该是 returned.
我尝试了以下查询但无济于事
db.applicants.find({"education" : { $elemMatch : {"grad" : {$exists : true}}}}, {"name":1, "education.grad" : 1}).pretty()
returns只有第一个匹配如下图,第一个文档是空的
{
"_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()
更新答案:
db.applicants.aggregate({$unwind: "$education"},
{$match: {"education.grad":{$exists: true}}},
{$project: {"education.name": 1, "education.grad": 1, "_id": 0}})
这将return两条记录,没有空文件。
在发布这个问题之前,我已经仔细研究过,但找不到准确的解决方案。 我有以下结构
stname: "SC",
dob : "1985",
education {[
{name : Lancaster,
year : 2013},
{name : Manchester,
year : 2001,
grad : 2004},
{name : Gambia,
year : 2001,
grad : 2011}
]}
所以我只想 return 具有毕业字段的文档。所以最后两个文件应该是 returned.
我尝试了以下查询但无济于事
db.applicants.find({"education" : { $elemMatch : {"grad" : {$exists : true}}}}, {"name":1, "education.grad" : 1}).pretty()
returns只有第一个匹配如下图,第一个文档是空的
{
"_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()
更新答案:
db.applicants.aggregate({$unwind: "$education"},
{$match: {"education.grad":{$exists: true}}},
{$project: {"education.name": 1, "education.grad": 1, "_id": 0}})
这将return两条记录,没有空文件。