Mongodb MonngoDB:从多个参数中筛选对象数组中的多个元素
我有以下格式的文件:Mongodb MonngoDB:从多个参数中筛选对象数组中的多个元素,mongodb,pymongo,Mongodb,Pymongo,我有以下格式的文件: "email": "eight@gmail.com", "primary_skills": [ { "name": "Angular", "rating": 4.5 }, { "name": "Rea
"email": "eight@gmail.com",
"primary_skills": [
{
"name": "Angular",
"rating": 4.5
},
{
"name": "React",
"rating": 3.0
}
],
"secondary_skills": [
{
"name": "Python",
"rating": 4.5
},
{
"name": "SQL",
"rating": 3.0
},
{
"name": "Vue",
"rating": 3.0
}
]
如何根据以下内容筛选用户:
1.)将角度和反应(或任何其他多种技能)作为主要技能且评分大于或等于3的用户(相同的评分适用于角度和反应)
2.)拥有Angular和Python(不管是在初级还是次级,但两者都应该在初级或次级)作为技能且评分大于或等于4的用户
对于第一部分和第二部分,它也应该用于过滤器的动态长度。例如,可以搜索['angular'、'react'],但其他人可以搜索['angular'、'react'、'python'、'aws']。对于第一个过滤器,您可以使用
$all
并获得包含以下特定数组的所有值:
db.collection.find({
“主要技能.名称”:{
“$all”:[
“棱角的”,
“反应”
]
}
})
此查询将包含“Angular”和“React”的文档返回到primary\u skills.name
。是必需的。文档包含数组中指示的所有值
另外,对于第二个过滤器,您可以使用$和以及$或
“$and”:[
{“$or”:[{“主要技能.名称”:“角度”},{“次要技能.名称”:“角度”}]},
{“$or”:[{“primary_skills.name”:“Python”},{“secondary_skills.name”:“Python”}]}
]
在这种情况下,$和
用于确保这两个条件均为真。这两个条件是两个$或
$或
确保单词作为主要技能
或次要技能
存在
并且,要添加评级,需要使用$elemMatch
将同一对象与数组进行比较。再次使用$in
与数组进行比较。
使用$elemMatch
是为了确保有一个对象与以下两个字段匹配:
“基本技能”:{
“$elemMatch”:{
“姓名”:{
“$in”:[
“Python”,
“AWS”
]
},
“评级”:{
“$gte”:3
}
}
}
现在,大家一起
db.collection.find({
“primary_skills.name”:{“$all”:[“Angular”,“React”]},
“$or”:[{
“初级技能”:{
“$elemMatch”:{
“名称”:{“$in”:[“Python”,“AWS”]},
“评级”:{“$gte”:3}}
}, {
“中等技能”:{
“$elemMatch”:{
“名称”:{“$in”:[“Python”,“AWS”]},
“评级”:{“$gte”:3}}
}]
})
检查但是评级部分呢?我试过你建议的方法,它可以正确地处理名字,但是用正确的评级过滤不起作用。我将编辑以添加此部分。更新的答案。对于第一部分和第二部分,它应该适用于过滤器的动态长度。例如,一个人可以搜索['angular','react'],但其他人可以搜索['angular','react','python','aws'.@RohitNawale如果我是你,我会给这家伙买杯咖啡:-)