mongodb - MongoDB 聚合:将数组聚合成键控对象
问题描述
我想使用聚合功能将文档数组展平为键控对象。这是我的文档的示例:
[
{
"_id": 1,
"texts": [
{ "language": "english", "text": "hello" },
{ "language": "german", "text": "hallo" },
{ "language": "french", "text": "bonjour" }
]
}, …
]
预期结果:
[
{
"_id": 1,
"texts": {
"english": "hello",
"german": "hallo",
"french": "bonjour"
}
}, …
]
我看过不同的运算符,例如$map
,但这似乎集中在将数组转换为数组。我可能需要 JS 等价物$reduce
,但找不到将我的值累积到对象中的方法。
有任何想法吗?
解决方案
您需要$map和$arrayToObject将 kv 对数组转换为单个对象:
db.col.aggregate([
{
$addFields: {
texts: {
$arrayToObject: {
$map: {
input: "$texts",
as: "text",
in: {
k: "$$text.language",
v: "$$text.text"
}
}
}
}
}
}
])
推荐阅读
- kubernetes - 如何更新证书颁发机构的剩余时间
- flutter - FormBuilderDropdown 关于 initialValue 属性的奇怪行为
- python - Python:返回从列表中过滤的对象的 index() 列表
- java - 如何将包含 diffgr 的 XML 字符串解组为 JAVA POJO
- ansible - Ansible - 当条件
- python - 从 pandastable 向 Table 类添加属性
- c# - 将 JsonPatchDocument 转换为字符串 C#
- php - 我如何在 laravel 中打开和运行一个不是我的项目?
- reactjs - 根据 Dispatch 返回 UseEffect 上的数据
- sql - 我有这张表,我想用 bigquery 中的最后一个非空值替换空值,我该怎么办?