如何检索基于Mongoose中的子文档值的父文档?

我有以下模式的:

var Child = new mongoose.Schema({ 'field': String, 'value': String }); var Parent = new mongoose.Schema({ 'name': String, 'children': [ Child ] }); 

我想返回其中一个Child对应于下面的JSON对象的Parent

 { 'field': 'Family Name', 'value': 'Smith' } 

我试过这个:

 Parent.findOne({ 'children': { 'field': 'Family Name', 'value': 'Smith' } }, fn ...) 

但它一直在检索null

编辑:

通过Mongo shell扩展testing,我发现Child子文档有自己的_id 。 如果我将_id添加到查询中,它将获取parent文档。 现在,我不知道那个孩子的id是什么。 所以:我怎样才能从子文档查询中删除它? (换句话说,上面的查询从字面上看只有两个属性的JSON对象,而子文档有三个)

我的环境是:Node.js,Mongoose,MongoDB

看来$elemMatch是解决这个问题的查询运算符。 实际的查询应该写成如下:

 Parent.findOne({ 'children': { $elemMatch: { 'field': 'Family Name', 'value': 'Smith' } } }, fn ...) 

是否有理由使用子文档上的字段,值结构? 简单地使用密钥作为字段比较容易,如{"FamilyName": "Smith"} 。 这将允许像这样的东西:

 Parent.findOne({'children.FamilyName': 'Smith}, function(err, doc){...});