MongoDB查询子文档数组

时间:2016-05-31 16:56:53

标签: mongodb mongodb-query subdocument

我在发布此问题之前已经彻底研究过,但我找不到准确的解决方案。 我有以下结构

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"
        }
    ]
}

此外,下面的查询会给出类似的结果,即一个空文档,其中渐变字段不可用。

db.applicants.find({"education.grad" : { $exists : true}}, {"education.grad" : {$exists : true}, "education.grad" : 1, name : 1 , dob : 1}).pretty()

1 个答案:

答案 0 :(得分:1)

更新答案:

// Connect to database
mongoose.connect(config.mongo.uri, config.mongo.options);

var connection = mongoose.createConnection(config.mongo.uri, config.mongo.options);

var app = express();

// enable CORS
app.use(cors());

// enable cookieParser
app.use(cookieParser());

// enable session
app.use(session({
    secret: config.secrets.session,
    resave: false,
    saveUninitialized: true,
    name: 'uniqueSessionId',
    store: new MongoStore(
        {
            mongooseConnection: connection
        }
    )
}));

这将返回两条记录,没有空文档。