2017-09-23 67 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

相關問題