PyMongo:查询同一集合中的多个数组

PyMongo: Querying in muiltple arrays within the same collection

假设我在文档中插入了以下条目。

     {
    "email": "test1@test.com",
    "primary_skills":[
        {"name": "python", "rating":4.0},
        {"name": "Django", "rating": 4.5},
        {"name": "AWS", "rating":3.0}
    ],
    "secondary_skills":[
        {"name": "Angular", "rating": 4.5},
        {"name": "React", "rating":3.0}
    ]
}, {
    "email": "test2@test.com",
    "primary_skills":[
        {"name": "python", "rating":4.0},
        {"name": "Django", "rating": 4.5},
        {"name": "SQL", "rating": 3.5},
        {"name": "AWS", "rating":3.0}
    ],
    "secondary_skills":[
        {"name": "Angular", "rating": 4.0},
        {"name": "React", "rating":3.5}
    ]
}

我想查找给定技能名称、评级和技能类型(主要或次要或两者)的所有用户(电子邮件)。

例如1 在 python 中找到评分高于 3 并标记为主要技能的用户。
例如2 在 angular 中找到主要和次要技能评分都在 3.5 以上的用户。
我应该如何编写最佳查询?

您可以使用 $elemMatch 筛选结果。

1)

db.collection.find({
  primary_skills: {
    "$elemMatch": {
      name: "python",
      rating: {
        $gt: 3
      }
    }
  }
},
{
  email: 1
})
db.collection.find({
  primary_skills: {
    "$elemMatch": {
      name: "Angular",
      rating: {
        $gt: 3.5
      }
    }
  },
  secondary_skills: {
    "$elemMatch": {
      name: "Angular",
      rating: {
        $gt: 3.5
      }
    }
  }
},
{
  email: 1
})

工作示例:https://mongoplayground.net/p/0A98YZtN6pv