将 Array 结构规范化为 mongoDB 中的多个文档
Posted
技术标签:
【中文标题】将 Array 结构规范化为 mongoDB 中的多个文档【英文标题】:Normalized the Array structure into Multiple documents in mongoDB 【发布时间】:2021-05-31 01:23:42 【问题描述】:输入是一次文档
"name": [
"abc",
"xyz"
],
"values": [
"123",
"100"
]
说明我想把Array Normalize into multiple documents,abc
和xyz
是动态来的,这些是用户自定义参数
预期输出
[
"data":
"name": "abc",
"values": "123"
,
"data":
"name": "xyz",
"values": "100"
];
【问题讨论】:
name
和 values
数组中可以有更多的值吗?它们的大小会不匹配吗?
不,它们不能大小不匹配,values
和name
的数组长度应该相同。
那么计数总是两个呢?
数组个数可以多一些,但个数应该是两个数组的匹配数
【参考方案1】:
你想做的是使用$zip,像这样:
db.collection.aggregate([
$project:
data:
$map:
input:
$zip:
inputs: [
"$name",
"$values"
]
,
as: "zipped",
in:
name:
"$arrayElemAt": [
"$$zipped",
0
]
,
values:
"$arrayElemAt": [
"$$zipped",
1
]
,
$unwind: "$data"
,
$replaceRoot:
newRoot:
data: "$data"
])
Mongo Playground
【讨论】:
【参考方案2】:试试这个:
db.testCollection.aggregate([
$project:
"data":
$map:
input: $zip: inputs: ["$name", "$values"] ,
as: "item",
in:
name: $arrayElemAt: ["$$item", 0] ,
values: $arrayElemAt: ["$$item", 1]
,
$unwind: "$data"
]);
【讨论】:
以上是关于将 Array 结构规范化为 mongoDB 中的多个文档的主要内容,如果未能解决你的问题,请参考以下文章
从 mongoDB 迁移到 clickhouse 中的嵌套数据结构
array_reduce — 用回调函数迭代地将数组简化为单一的值
array_reduce — 用回调函数迭代地将数组简化为单一的值
将行非规范化为列是不是会提高 SQL Server 中的性能?