是否有可能返回多个子文档mongoDB和Node.js?

我目前有一个模式,目前看起来像:

var User = new Schema({ id: String, firstName: String, lastName: String, password: String, username: String, position: [{ title: String, location: String, start: String, term:Number, description:String, date: {type: Date, default: Date.now} }] }); 

我有两个用户,每个都有两个embedded式位置文档。

用户1:

 "position" : [ { "title" : "Web Developer", "location" : "Dublin", "start" : "May 2017", "term" : 6, "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi", "_id" : ObjectId("58d6b7e11e793c9a506ffe0f") }, { "description" : "description", "term" : 12, "start" : "may 2018", "location" : "Dublin", "title" : "Web Developer", "_id" : ObjectId("58d6af99e4318f4703ceb2af") } ], 

用户2:

  "position" : [ { "title" : "Software Engineer", "location" : "Cork", "start" : "May 2017", "term" : 9, "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in miorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi", "_id" : ObjectId("58d6af99e4318f4703cebsju7") }, { "title" : "Web Developer", "location" : "Waterford", "start" : "May 2017", "term" : 6, "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi", "_id" : ObjectId("58d6af99e4318f4703ceb6aj") } ], 

我的查询如下所示:

  app.post('/search', function (req, res) { var position = new RegExp(req.body.position, 'i'); User.find({'position.title': position}, 'position.$').exec(function (err, result) { console.log(result); res.send({ results: result }); }); // }); 

当search“Web Developer”时,这将返回第一个用户中的第一个“Web Developer”条目,第二个用户返回“Web Developer”条目,但是我似乎不能返回任何后续条目,我只是想知道是不是一个MongoDB问题,我只能返回一个匹配每个用户的子文档? 或者有什么我的代码错了?

返回的对象可以在下面看到,结果对象返回两个用户,每个用户都有一个位置对象,但是应该有3个。 在这里输入图像说明

假设我在位置数组中有一个数组,我将如何访问它?

我目前的代码:

  app.get('/applied', function(req, res){ User.aggregate( {$unwind : "$position"}, {$unwind : "$position.applied"}, {$match:{'position.applied.candidate_id': "58dc2bd4e7208a3ea143959e"}}).exec(function (err, result) { console.log(result); }); res.render('applied', { title: 'applied'}); }); 

我的模式:

  position: [{ title: String, location: String, start: String, term:Number, description:String, date: {type: Date, default: Date.now}, applied:[{ candidate_id: String, name: String }], }], 

你可以使用$ unwind来获取多个不同于元素匹配或'。'的元素。 只返回第一个匹配数据的运算符

 User.aggregate( {$unwind : "$position"}, {$match:{'position.title': position}}).exec(function (err, result) { console.log(result); res.send({ results: result }); });