【问题标题】:How can I query documents where a values match a parent object and child object?如何查询值与父对象和子对象匹配的文档?
【发布时间】:2017-09-23 22:08:01
【问题描述】:

我是 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"}
      }
    }}
   ]
};

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: json mongodb mongoose


    【解决方案1】:

    您可以尝试以下查询。移动$elemMatch内的and条件

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

    【讨论】:

    • 哇非常感谢@Veeram,我不知道你可以在元素匹配中插入点符号!我感谢您的帮助! :)
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多