使用动态投影在 Mongodb 中进行聚合
Posted
技术标签:
【中文标题】使用动态投影在 Mongodb 中进行聚合【英文标题】:Aggregation in Mongodb with dynamic projection 【发布时间】:2022-01-18 18:24:18 【问题描述】:我正在使用 Typescript 中的 Nodejs 驱动程序研究 MongoDB;我想从具有“动态”投影的文档中检索子文档;这应该通过列出所需字段的数组来完成:
"_id" : ObjectId("6006be017fdd3b1018e0f533"),
"name" : "Cindy",
"surname" : "Red",
"age" : 30.0,
"various" :
"aaa1" : "111",
"bbb2" : "222"
"_id" : ObjectId("6006be0b7fdd3b1018e0f534"),
"name" : "Valentina",
"surname" : "Green",
"age" : 30.0,
"various" :
"ccc3" : "333",
"ddd4" : "444"
// This piece of code to execute the query:
const arrayValues = ["$various"];
const result = await myConnectedClient
.db("ZZZ_TEST_ALL")
.collection("my_collection_01")
.aggregate<any>([
$project: _id: 0, arrayValues ,
]);
结果:
_id: 6006be017fdd3b1018e0f533,
arrayValues: [ aaa1: '111', bbb2: '222' ]
_id: 6006be0b7fdd3b1018e0f534,
arrayValues: [ ccc3: '333', ddd4: '444' ]
但我想要这样的结果:
various: aaa1: '111', bbb2: '222'
various: ccc3: '333', ddd4: '444'
谢谢。
【问题讨论】:
添加了一个小例子,让我知道它是否有效:) 是的,它有效。谢谢沃尔夫冈。 【参考方案1】:应该这样做
const arrayValues = ["$various"];
const result = await myConnectedClient
.db("ZZZ_TEST_ALL")
.collection("my_collection_01")
.aggregate<any>([ $project: _id: 0, arrayValues ])
.map((e) =>
Object.keys(e.arrayValues[0]).map((k) =>
return [k]: e.arrayValues[0][k] ;
)
)
.map((v) =>
return various: Object.assign(, ...v) ;
);
打印(作为 JSON)
[
"various": "aaa1": "111", "bbb2": "222" ,
"various": "ccc3": "333", "ddd4": "444"
]
【讨论】:
以上是关于使用动态投影在 Mongodb 中进行聚合的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mongodb 中的聚合在嵌入文档的数组中执行操作?