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

Json 如何根据Mongoose中的子文档值检索父文档?,json,node.js,mongodb,mongoose,Json,Node.js,Mongodb,Mongoose,我有以下模式: var Child = new mongoose.Schema({ 'field': String, 'value': String }); var Parent = new mongoose.Schema({ 'name': String, 'children': [ Child ] }); 我想返回父对象,其中一个子对象对应于以下JSON对象: { 'field': 'Family Name', 'value': 'Smith' }

我有以下模式:

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

var Parent = new mongoose.Schema({
    'name': String,
    'children': [ Child ]
  });
我想返回
父对象
,其中一个子对象对应于以下JSON对象:

{ 'field': 'Family Name', 'value': 'Smith' }
我试过这个:

Parent.findOne({ 'children': { 'field': 'Family Name', 'value': 'Smith' } }, fn ...)
但它继续检索
null

编辑:

通过Mongo shell扩展进行测试,我发现
子文档有自己的
\u id
。如果我将该
\u id
添加到查询中,它将获取父
文档。现在,我事先不知道那个孩子的id是什么。因此:如何将其从子文档查询中删除?(换句话说,上面的查询实际上只查找只有两个属性的JSON对象,而子文档有三个属性)


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

在子文档上使用字段、值结构有什么原因吗?简单地使用键作为字段会更容易,比如
{“FamilyName”:“Smith”}
。这将允许如下操作:

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

似乎
$elemMatch
是解决此问题的查询运算符。实际查询应按以下方式编写:

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

如果有子对象,可以调用
child.parent()
。如果没有,则需要查询。我没有
子对象
对象,因此需要查询。但是查询本身似乎没有获取任何
父项
…确实如此,但是我有一个动态模型,因此结构有点扩展。与此同时,我找到了解决办法;我想知道如何使$elemMatch在子文档上工作。你试过类似的东西吗?