mongodb - 丰富 mongodb 查询中的嵌套数组项
问题描述
我有一个嵌套很深的 mongo 集合。它的文件看起来像
{
first: [
{
second: [
{
name: "some name",
third: [
1, 2, 3
]
}
]
}
],
// other fields
}
我想从集合中得到以下响应:
{
first: [
{
second: [
{
name: "some name",
third: [{
id: 1,
name: "some name"
}, {
id: 2,
name: "some name"
}, {
id: 3,
name: "some name"
}]
}
]
}
]
}
我尝试使用以下查询
db.getCollection("collection").aggregate
([
{
"$addFields": {
"first.second.third.id": "$first.second.third.id",
"first.second.third.name": "$first.second.name"
}
}
])
但它没有效果。我怎样才能得到想要的结果?先感谢您!
解决方案
您需要使用聚合来展开嵌套数组或映射数组以获得结果:
输入集合:
[
{
first: [
{
second: [
{
name: "some name",
third: [
1,
2,
3
]
}
]
}
]
}
]
聚合查询:
db.collection.aggregate([
{
$project: {
first: {
$map: {
input: "$first",
as: "item",
in: {
second: {
$map: {
input: "$$item.second",
as: "item2",
in: {
name: "$$item2.name",
third: {
$map: {
input: "$$item2.third",
as: "item3",
in: {
id: "$$item3",
name: "$$item2.name"
}
}
}
}
}
}
}
}
}
}
}
])
给出结果/输出:
[
{
"first": [
{
"second": [
{
"name": "some name",
"third": [
{
"id": 1,
"name": "some name"
},
{
"id": 2,
"name": "some name"
},
{
"id": 3,
"name": "some name"
}
]
}
]
}
]
}
]
推荐阅读
- r - 尽管R中的种子相同,但样本不同
- terraform - 使用 Terraform 创建具有 IAM 角色的服务帐户
- reactjs - 如何将现有的 React 应用程序(只是没有后端的 UI)插入(注入?)到 SilverStripe 页面布局中?
- web-scraping - 有没有办法将 Select.rs 的 find 迭代器转换为 Rayon ParallelIterator?
- python-3.x - 如何从python中的字符串中删除一些点
- jquery - Cheerio / jQuery 相当于 Descendants.LastOrDefault(HTML 敏捷包)
- date - 在使用数据表列的计算函数内的 Ember 控制器中使用 Moment.js
- javascript - 有没有办法在这个 v-for 中正确使用索引而不出错
- reactjs - 如何使用不同大小的图像将卡片设置为相同的高度和宽度?
- python-3.x - 从 systemd 启动时出现瓶错误“处理请求时出现严重错误:”