过滤 MongoDB 中的子文档
Filtering subdocuments in MongoDB
我有这样一个文档:
{"_id" : ObjectId("5836b91788538303"),
"Name" : "Maria",
"Email" : "mgarciasanz@gmail.es",
"Age" : 34,
"Contacts": [
{"Contact_user" : {
"_id" : ObjectId("5836b916885383"),
"Name" : "Alejandro",
"Email" : "aamericagarzon@hotmail.es",
"Age" : 32}},
{"Contact_user" : {
"_id" : ObjectId("5836b916888956"),
"Name" : "Victor",
"Email" : "ctiernocrespo@hotmail.es",
"Age" : 41}},
{"Contact_user" : {
"_id" : ObjectId("5836b9168880987"),
"Name" : "Agata",
"Email" : "adelgadosanchez@hotmail.es",
"Age" : 37}},
...
]}
我需要做的第一件事是将 "Email"
与 "mgarciasanz@gmail.es" 匹配,第二步是过滤子文档以获得年龄大于或等于 36 的联系人岁。我试过放松、双重匹配条件、过滤器...但我没有进入解决方案。
此外,我需要这样的输出:
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "vtiernocrespo@hotmail.es", "Contact_age" : 41}
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "adelgadosanchez@hotmail.es", "Contact_age" : 37}
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "tjazmintablas@hotmail.es", "Contact_age" : 36}
如何管理才能在每个输出句子中重复 "Email"
?
提前致谢
您可以尝试查询,
$match
您需要的条件
$unwind
解构Contacts
数组
$match
您需要的条件
$project
显示必填字段
db.collection.aggregate([
{
$match: {
Email: "mgarciasanz@gmail.es"
}
},
{ $unwind: "$Contacts" },
{
$match: {
"Contacts.Contact_user.Age": {
$gte: 36
}
}
},
{
$project: {
_id: 0,
Email: 1,
Contact_email: "$Contacts.Contact_user.Email",
Contact_age: "$Contacts.Contact_user.Age"
}
}
])
我有这样一个文档:
{"_id" : ObjectId("5836b91788538303"),
"Name" : "Maria",
"Email" : "mgarciasanz@gmail.es",
"Age" : 34,
"Contacts": [
{"Contact_user" : {
"_id" : ObjectId("5836b916885383"),
"Name" : "Alejandro",
"Email" : "aamericagarzon@hotmail.es",
"Age" : 32}},
{"Contact_user" : {
"_id" : ObjectId("5836b916888956"),
"Name" : "Victor",
"Email" : "ctiernocrespo@hotmail.es",
"Age" : 41}},
{"Contact_user" : {
"_id" : ObjectId("5836b9168880987"),
"Name" : "Agata",
"Email" : "adelgadosanchez@hotmail.es",
"Age" : 37}},
...
]}
我需要做的第一件事是将 "Email"
与 "mgarciasanz@gmail.es" 匹配,第二步是过滤子文档以获得年龄大于或等于 36 的联系人岁。我试过放松、双重匹配条件、过滤器...但我没有进入解决方案。
此外,我需要这样的输出:
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "vtiernocrespo@hotmail.es", "Contact_age" : 41}
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "adelgadosanchez@hotmail.es", "Contact_age" : 37}
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "tjazmintablas@hotmail.es", "Contact_age" : 36}
如何管理才能在每个输出句子中重复 "Email"
?
提前致谢
您可以尝试查询,
$match
您需要的条件$unwind
解构Contacts
数组$match
您需要的条件$project
显示必填字段
db.collection.aggregate([
{
$match: {
Email: "mgarciasanz@gmail.es"
}
},
{ $unwind: "$Contacts" },
{
$match: {
"Contacts.Contact_user.Age": {
$gte: 36
}
}
},
{
$project: {
_id: 0,
Email: 1,
Contact_email: "$Contacts.Contact_user.Email",
Contact_age: "$Contacts.Contact_user.Age"
}
}
])