如何查询对象数组的某些元素?(mongodb)
假设我有一个mongo DB集合,其记录如下:如何查询对象数组的某些元素?(mongodb),mongodb,Mongodb,假设我有一个mongo DB集合,其记录如下: { email: "person1@gmail.com", plans: [ {planName: "plan1", dataValue = 100}, {planName: "plan2", dataValue = 50} ] }, { email: "person2@gmail.com", plans: [
{
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
字段
请注意,使用这种方法,如果电子邮件
字段不是唯一的,则可能有多个文档仅包含一个数据值
字段