【发布时间】:2016-09-29 19:30:30
【问题描述】:
在发布此问题之前,我已经进行了彻底的研究,但找不到准确的解决方案。 我有以下结构
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()
【问题讨论】:
-
我在这里回答了类似的问题:stackoverflow.com/questions/37510908/…
-
@felipsmartins,我觉得他们很不一样,他试图基于一个字段进行查询。
-
哦,我明白了。恐怕你必须使用聚合。
-
@felipsmartins,查看第一个查询输出的编辑。空文件是主要问题。没有它,一切都会正常工作。
-
stackoverflow.com/questions/3985214/… 的可能欺骗。可以在此处找到单元素和多元素案例的答案。
标签: mongodb mongodb-query subdocument