2017-03-28 69 views
1

我现在有这目前看起来像一个模式:是否可以使用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} 
    }] 

}); 

我有两个用户,每个用户有两个嵌入位置的文件。

USER1:

"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 }); 
    }); // 


}); 

当搜索 'Web开发',这将返回第一个 'Web开发'在第一个用户中输入内容,在第二个用户中输入“Web Developer”,但我似乎无法返回任何内容随后的条目,我只是想知道它是一个MongoDB问题,我只能返回一个匹配每个用户的子文档?或者在我的代码中有什么错误?

返回的对象在下面可以看到,结果对象返回的两个用户,每个具有一个位置对象,但是应该有3 enter image description here

假设我有位置阵列内的阵列,如何将我访问这个?

我当前的代码:

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 
      }], 
    }], 
+0

的可能的复制[只检索MongoDB中集合的对象阵列中的查询元件](http://stackoverflow.com/questions/3985214/retrieve-only-the-queried -element-in-an-object-array-in-mongodb-collection) – Veeram

回答

3

您可以使用$放松为此它会为你抓取多个条目从集合不同元素匹配或运算符,它仅返回第一匹配数据

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

非常感谢!你一直是一个真正的帮助 – user

+0

我已经更新了我的问题,因为我再次被困于获得子文档的访问权限..你能告诉我我要去哪里吗?数组返回空白 – user

+0

你的** position.applied。**应用的字段可以共享应用领域的模式和示例文档。 –

相关问题