如何检索基于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){...});