2017-09-23 55 views
0

我是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 engineerANDperson.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

你可以试试下面的查询。移动和条件内$elemMatch

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

哇非常感谢你@Veeram,我不知道,你可以插入一个elemmatch内点符号!我感谢您的帮助! :) – Raja