如何根据Mongoose中的子文档值检索父文档?

时间:2013-03-28 15:51:31

标签: json node.js mongodb mongoose

我有以下架构:

var Child = new mongoose.Schema({
    'field': String,
    'value': String
  });

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

我想返回Parent的{​​{1}}对应于以下JSON对象:

Child

我试过这个:

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

但它一直在检索Parent.findOne({ 'children': { 'field': 'Family Name', 'value': 'Smith' } }, fn ...)

修改

通过Mongo shell扩展测试,我发现null子文档有自己的Child。如果我将_id添加到查询中,则会获取_id文档。现在,我事先并不知道那个孩子parent会是什么。那么:如何从子文档查询中删除它? (换句话说,上面的查询字面上查找只有两个属性的JSON对象,而子文档有三个)

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

2 个答案:

答案 0 :(得分:10)

$elemMatch似乎是解决此问题的查询运算符。实际查询应写如下:

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

答案 1 :(得分:4)

您是否有理由在子文档中使用字段,值结构?简单地将密钥用作字段会更容易,例如{"FamilyName": "Smith"}。这将允许类似:

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