gpt4 book ai didi

javascript - 如何使用 Mongoose 对两个元素进行分组?

转载 作者:行者123 更新时间:2023-12-04 07:54:56 26 4
gpt4 key购买 nike

我需要使用 mongoose 创建一个查询,它允许我使用组来计算处于 STARTED 或 NOT INITIATED 状态的元素,然后返回处于每个状态的元素的计数。
这是我正在使用的 json 对象。

[
{
status: "INITIATED",
_id: "6057e0013a3dec1d44a7d152",
group: "dairy",
location: "001",
total_items: 30,
__v: 0
},
{
status: "INITIATED",
_id: "6057e0013a3dec1d44a7d153",
group: "dairy",
location: "002",
total_items: 45,
__v: 0
},
{
status: "INITIATED",
_id: "6057e0013a3dec1d44a7d154",
group: "dairy",
location: "003",
total_items: 12,
__v: 0
},
{
status: "NOT INITIATED",
_id: "6057e0013a3dec1d44a7d155",
group: "dairy",
location: "004",
total_items: 50,
__v: 0
},
{
status: "NOT INITIATED",
_id: "6057e0013a3dec1d44a7d156",
group: "drugs",
location: "005",
total_items: 23,
__v: 0
},
{
status: "NOT INITIATED",
_id: "6057e0013a3dec1d44a7d157",
group: "drugs",
location: "006",
total_items: 76,
__v: 0
}]
例如,我需要从乳制品组返回一个具有以下结构的 json。
{
'id': null,
'group': 'dairy',
'INITIATED': 3,
'NO INITIATED': 1
}
因为乳制品组 3 的元素处于 STARTED 状态,而其中一个元素处于 NOT INITIATED 状态。另一个例子是应该返回以下 json 的药物组。
{
'id': null,
'group': 'medications',
'STARTED': 0,
'NOT INITIATED': 2
}
为了做到这一点,我试图让以下代码工作。
db.collection.aggregate ([

{
"$ group": {
_id: {
source: "$ group",
status: "$ status"
},
count: {
$ sum: 1
}
}
}
])
但是我不太清楚如何使用该组来生成我需要的响应。

最佳答案

好的,所以这比我一开始想的要棘手,但您可以这样做:
首先,您按组字段对文档进行分组,并总结状态字段的计数。我正在使用 $cond$eq运算符以确保状态与计数字段匹配。最后,你申请$project在没有 _id 的情况下获得所需的输出 field :

db.collection.aggregate([
{ "$group": {
"_id": "$group",
"NOT INITIATED": {
"$sum": {
"$cond": [ { "$eq": [ "$status", "NOT INITIATED" ] }, 1, 0]
}
},
"INITIATED": {
"$sum": {
"$cond": [ { "$eq": [ "$status", "INITIATED" ] }, 1, 0]
}
},
} },
{ "$project": {
"_id": 0,
"group": "$_id",
"INITIATED":1,
"NOT INITIATED":1
} }])
我在 mongoplayground 上为您创建了一个示例: https://mongoplayground.net/p/H-72VzWoeoN

关于javascript - 如何使用 Mongoose 对两个元素进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66754377/

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