gpt4 book ai didi

MongoDB 分组

转载 作者:可可西里 更新时间:2023-11-01 10:22:39 30 4
gpt4 key购买 nike

我有这样的 mongoDB 集合

{ 
"_id" : "EkKTRrpH4FY9AuRLj",
"stage" : 10,
},
{
"_id" : "EkKTRrpH4FY9AuRLj",
"stage" : 10,
},
{
"_id" : "EkKTRrpH4FY9AuRLj",
"stage" : 20,
}

我想把它分组在

stage: 10 in paid 
stage: 20 in unpaid

结果应该是这样的

{
"paid": [
{
"_id" : "EkKTRrpH4FY9AuRLj",
"stage" : 10,
},
{
"_id" : "EkKTRrpH4FY9AuRLj",
"stage" : 10,
}
],
"unpaid": [
{
"_id" : "EkKTRrpH4FY9AuRLj",
"stage" : 20,
}
]
}

我该怎么做?

最佳答案

建议使用 aggregation framework为此,您需要运行初始 $group 使用运算符的分阶段管道 $push 创建新数组, $cond 评估某些条件并使用逻辑嵌入正确的文档。

最后的 $project 流水线步骤是必要的,以修剪先前流水线中的一些冗余数组元素,即使用 $setDifference 过滤掉 [false] 值。 运算符。

考虑运行以下在 mongo shell 中显示上述内容的聚合管道:

db.collection.aggregate([
{
"$group": {
"_id": null,
"paid": {
"$push": {
"$cond": [
{ "$eq": [ "$stage", 10 ] },
{ "_id": "$_id", "stage": "$stage" },
false
]
}
},
"unpaid": {
"$push": {
"$cond": [
{ "$eq": [ "$stage", 20 ] },
{ "_id": "$_id", "stage": "$stage" },
false
]
}
}
}
},
{
"$project": {
"_id": 0,
"paid": {
"$setDifference": [ "$paid", [false] ]
},
"unpaid": {
"$setDifference": [ "$unpaid", [false] ]
}
}
}
])

添加 meteorhacks:aggregate 暴露 的包 .aggregate() Mongo.Collection 实例上的方法。请注意,这仅适用于服务器端,并且没有内置的观察支持或 react 性。

添加到您的应用中

meteor add meteorhacks:aggregate

关于MongoDB 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37461653/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com