如何查询值与父对象和子对象匹配的文档?
问题描述:
我是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
ANDperson.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"}
}
}}
]
};
任何帮助将不胜感激。谢谢!
答
你可以试试下面的查询。移动和条件内$elemMatch
var query = {
"_id": {
"$nin": [userID]
},
"person": {
"$elemMatch": {
"name":{$regex: `^${titleName}$`, $options: "i"},
"skills.name": {$regex: `^${skillName}$`, $options: "i"}
}
}
};
哇非常感谢你@Veeram,我不知道,你可以插入一个elemmatch内点符号!我感谢您的帮助! :) – Raja