如何查询值与父对象和子对象匹配的文档?

时间:2017-09-23 13:44:38

标签: json mongodb mongoose

我是Mongoose的新手,我已经尝试了几天如何解决这个问题,我仍然遇到麻烦。

我的文档对象如下。

"person" : [
  {
    "title" : "front-end developer",
    "skills" : [
      {
        "name" : "js",
        "project" : "1",
      },
      {
        "name" : "CSS",
        "project" : "5",
      }
    ]
  },
  {
    "title" : "software engineer",
    "skills" : [
      {
        "name" : "Java",
        "project" : "1",
      },
      {
        "name" : "c++",
        "project" : "5",
      }
    ]
  }
]

我想要完成的是返回所有person.title = software engineer AND person.skills.name = c++的文档。技能c++必须属于software engineer人物对象。因此,当前端开发人员c++时返回文档并不理想。

这是我到目前为止所做的尝试。查询有效,但它返回满足其中一个条件而不是两者的文档。

var query = {
  _id: { $nin: [userID] },
    $and: [
      {person:  {
        $elemMatch: {
          name: {$regex: `^${titleName}$`, $options: "i"}
      }
    }},
    {[`person.skills`]:  {
      $elemMatch: {
        name: {$regex: `^${skillName}$`, $options: "i"}
      }
    }}
   ]
};

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试以下查询。在$elemMatch

中移动和条件
var query = {
  "_id": {
    "$nin": [userID]
  },
  "person": {
    "$elemMatch": {
      "name":{$regex: `^${titleName}$`, $options: "i"},
      "skills.name": {$regex: `^${skillName}$`, $options: "i"}
    }
  }
};