如何查询对象数组的某些元素?(mongodb)

如何查询对象数组的某些元素?(mongodb),mongodb,Mongodb,假设我有一个mongo DB集合,其记录如下: { email: "person1@gmail.com", plans: [ {planName: "plan1", dataValue = 100}, {planName: "plan2", dataValue = 50} ] }, { email: "person2@gmail.com", plans: [

假设我有一个mongo DB集合,其记录如下:

{
email: "person1@gmail.com",
plans: [
         {planName: "plan1", dataValue = 100},
         {planName: "plan2", dataValue = 50}
       ]
},
{
email: "person2@gmail.com",
plans: [
         {planName: "plan3", dataValue = 25},
         {planName: "plan4", dataValue = 12.5}
       ]
}

我想查询数据值返回电子邮件所在的位置“person1@gmail.com计划名称为“计划1”。我将如何处理此问题?

您可以使用

管道可能如下所示:

db.collection.aggregate([
  { $match: { "email" :"person1@gmail.com", "plans.planName": "plan1" }},
  { $unwind: "$plans" },
  { $match: { "plans.planName": "plan1" }},
  { $project: { "_id": 0, "dataValue": "$plans.dataValue" }}
])
第一阶段将检索
电子邮件
字段等于
person1@gmail.com
并且
计划
数组中的任何元素的
计划名
等于
plan1

第二阶段将为
计划
数组中的每个元素输出一个文档。
计划
字段现在将是一个包含单个计划对象的对象

在第三个
$match
阶段,将进一步匹配未缠绕的文档,以仅包括带有
Plan.planName
plan1
的文档。最后,该阶段排除
\u id
字段,并投影一个值为
plans.dataValue
dataValue
字段

请注意,使用这种方法,如果
电子邮件
字段不是唯一的,则可能有多个文档仅包含一个
数据值
字段