Mongodb聚合,在groupBy上获得预期结果,无需硬编码类别
我的目标是编写一个高效的查询,即使用给定的输入,为我提供预期的输出。我有一些可行的解决方案,但所有的“类型”都是“手动”编写的,所以我想我正在寻求帮助,以获得相同的输出,但方式不同 输入 报告ID 类型 重量 A. “鱼” 4. A. “鱼” 2. A. “奶牛” 0 B “鱼” 2. B “金枪鱼” 1. B “鸟”Mongodb聚合,在groupBy上获得预期结果,无需硬编码类别,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的目标是编写一个高效的查询,即使用给定的输入,为我提供预期的输出。我有一些可行的解决方案,但所有的“类型”都是“手动”编写的,所以我想我正在寻求帮助,以获得相同的输出,但方式不同 输入 报告ID 类型 重量 A. “鱼” 4. A. “鱼” 2. A. “奶牛” 0 B “鱼” 2. B “金枪鱼” 1. B “鸟” 我将集中讨论第二部分,这是一个困难的部分。我不知道是否有一个更短更好的解决方案,但这一个应该有效: db.collection.aggregate([ { $unse
我将集中讨论第二部分,这是一个困难的部分。我不知道是否有一个更短更好的解决方案,但这一个应该有效:
db.collection.aggregate([
{
$unset: "_id"
},
{
$set: {
data: {
"$objectToArray": "$$ROOT"
}
}
},
{
$group: {
_id: "$reportId",
data: {
$push: "$data"
}
}
},
{
$set: {
data: {
$reduce: {
input: "$data",
initialValue: [],
in: {
$concatArrays: [
"$$value",
"$$this"
]
}
}
}
}
},
{
$set: {
data: {
$filter: {
input: "$data",
cond: {
$not: {
$in: [
"$$this.k",
[
"totalCount",
"totalWeight"
]
]
}
}
}
}
}
},
{
$unwind: "$data"
},
{
$group: {
_id: "$_id",
data: {
$push: "$data"
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$data"
}
}
}
])
请看我将集中讨论第二部分,这是一个困难的部分。我不知道是否有一个更短更好的解决方案,但这一个应该有效:
db.collection.aggregate([
{
$unset: "_id"
},
{
$set: {
data: {
"$objectToArray": "$$ROOT"
}
}
},
{
$group: {
_id: "$reportId",
data: {
$push: "$data"
}
}
},
{
$set: {
data: {
$reduce: {
input: "$data",
initialValue: [],
in: {
$concatArrays: [
"$$value",
"$$this"
]
}
}
}
}
},
{
$set: {
data: {
$filter: {
input: "$data",
cond: {
$not: {
$in: [
"$$this.k",
[
"totalCount",
"totalWeight"
]
]
}
}
}
}
}
},
{
$unwind: "$data"
},
{
$group: {
_id: "$_id",
data: {
$push: "$data"
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$data"
}
}
}
])
请参见Amazin job,它几乎就在那里-我需要按reportId分组的数据。但我不知道这是否更简单/更好。目前正在查看更新后的oneAmazin作业的数据,它几乎就在那里-我需要按reportId分组的数据。但我不知道这是否更简单/更好。目前正在调查$1,请获取更新的