mongodb - 如何在mongodb中检索嵌套数组的单个元素?
问题描述
假设我的 mongodb 中有这样的文件:
{
id: 1,
names: [
{
id: 2,
first: [
{
id: 3,
name: "alice",
},
{
id: 4,
name: "bob",
},
]
},
{
id: 5,
first: [
{
id: 6,
name: "berhe",
},
{
id: 7,
name: "belay",
},
]
}
]
}
{
id: 8,
names: [
{
id: 9,
first: [
{
id: 10,
name: "gemechu",
},
{
id: 11,
name: "samy",
},
]
},
{
id: 12,
first: [
{
id: 13,
name: "helen",
},
{
id: 14,
name: "natu",
},
]
}
]
}
现在如何检索一个值
id=8,
names.id = 9,
names.first.id=10
就像这样:
{
id:10,
name:"gemechu"
}
解决方案
$match
使用所有条件过滤文档$elemMatch
,$unwind
解构names
数组$match
命名id
条件$unwind
解构first
数组$match
第一个id
条件$project
格式化结果
db.collection.aggregate([
{
$match: {
id: 8,
names: {
$elemMatch: {
id: 9,
"first.id": 10
}
}
}
},
{ $unwind: "$names" },
{ $match: { "names.id": 9 } },
{ $unwind: "$names.first" },
{ $match: { "names.first.id": 10 } },
{
$project: {
id: "$names.first.id",
name: "$names.first.name"
}
}
])
推荐阅读
- vue.js - Navbar Toggler Bootstrap with VueJS - 在点击外部指令时关闭
- xml - XML 模式设计:在不违反唯一粒子属性的情况下选择相似序列?
- type-conversion - conv_integer() 与 to_integer()
- python - 不知道如何修复我的洗牌和交易的错误 python 程序 IndexError: list index out of range cant figgur
- c++ - 纹理不会出现 FreeGLUT
- node.js - NodeJs / Mongo:在模型中添加新文件
- rust - include_bytes 的运行时成本是多少!或include_str?
- r - 如何使用 R 获取括号/括号中的数字
- javascript - 如何为 Wordpress 自定义注册模板设置不同的角色
- unix - UNIX 中所有具有四位 UID 的用户