以下是我的数据结构,我需要提取“发布者”动态键,并将($lookup)与另一个用于匹配记录的集合进行比较,对%值进行求和。
"_id" : ObjectId("5eff1e9a9bb60729d3278140"),
"tracks" : [
{
"_id" : ObjectId("5efd9548327f5509b009b5a9"),
"artist" : ["abc"],
"genre" : "Pop",
"publishers" : {
"a" : "30.00%",
"b" : "30.00%",
"c" : "30.00%",
"d" : "10.00%"
},
"__v" : 0
}发布于 2020-07-04 18:54:24
您可以使用此聚合管道。它将发布数组中的动态键转换为以下形式的对象,然后可以轻松地应用$lookup阶段。
{
"_id": ObjectId("5eff1e9a9bb60729d3278140"),
"percentage": 30,
"publisher": "b"
}db.collection.aggregate([
{
$unwind: "$tracks"
},
{
$project: {
publisher: {
$objectToArray: "$tracks.publishers"
}
}
},
{
$unwind: "$publisher"
},
{
$project: {
publisher: "$publisher.k",
percentage: {
$convert: {
input: {
$trim: {
input: "$publisher.v",
chars: "%"
}
},
to: "double"
}
}
}
}
])更新的例子
https://stackoverflow.com/questions/62731486
复制相似问题