MongoDB 和 ReactJS 聚合:如何 return 计数项目?
MongoDB and ReactJS aggregation : how to return the count of items?
尽管查看了许多其他帖子,但我无法弄清楚自己做错了什么。我想做一个简单的“计数和分组依据”,所以我发现我需要使用 collection.aggregate...
.
这是我的 [pubkey].ts
执行聚合的地方,基本上我想计算按 address
sp 分组的每个条目我会得到类似的东西:
{address1: 6},
{address2: 1},
...
import { connect } from '../../../utils/db'
import Raffles from '../../../utils/db/raffle'
export default async function handler(req, res) {
const { method } = req
const { pubkey } = req.query
await connect()
switch (method) {
case 'POST':
...
break
case 'GET':
try{
const ticket = await Raffles.aggregate([{
"$match": {
"address": pubkey
}
},{
"$count": { $sum: 1}
}])
res.status(201).json({ success: true, data: ticket })
} catch (error){
res.status(400).json({ success: false, data: error })
}
break
default:
res.status(400).json({ success: false })
break
}
}
我不知道如何进行求和部分,如果我替换 "$count": "xxyz"
我会成功,但现在用 "$count" : {$sum: 1}
我会出错
有什么想法吗?
如果您使用 $count 阶段,它只接收字段名称的字符串参数,因此您的管道可能是这样的:
[
{
"$match": {
"address": pubkey
}
},
{
"$count": "total"
}
]
它过滤匹配地址的文档,然后获取计数。如果你想要按地址分组的文档数,你可以在管道中使用这个 $group 阶段(在这种情况下 $count 是一个聚合累加器,所以它不带任何参数):
[
{
$group: {
"_id": "$address",
"total": {
$count: {}
}
}
}
]
这应该会给你一些这样的结果:
{_id: address1, total: 6}
{_id: address2, total: 1}
尽管查看了许多其他帖子,但我无法弄清楚自己做错了什么。我想做一个简单的“计数和分组依据”,所以我发现我需要使用 collection.aggregate...
.
这是我的 [pubkey].ts
执行聚合的地方,基本上我想计算按 address
sp 分组的每个条目我会得到类似的东西:
{address1: 6},
{address2: 1},
...
import { connect } from '../../../utils/db'
import Raffles from '../../../utils/db/raffle'
export default async function handler(req, res) {
const { method } = req
const { pubkey } = req.query
await connect()
switch (method) {
case 'POST':
...
break
case 'GET':
try{
const ticket = await Raffles.aggregate([{
"$match": {
"address": pubkey
}
},{
"$count": { $sum: 1}
}])
res.status(201).json({ success: true, data: ticket })
} catch (error){
res.status(400).json({ success: false, data: error })
}
break
default:
res.status(400).json({ success: false })
break
}
}
我不知道如何进行求和部分,如果我替换 "$count": "xxyz"
我会成功,但现在用 "$count" : {$sum: 1}
我会出错
有什么想法吗?
如果您使用 $count 阶段,它只接收字段名称的字符串参数,因此您的管道可能是这样的:
[
{
"$match": {
"address": pubkey
}
},
{
"$count": "total"
}
]
它过滤匹配地址的文档,然后获取计数。如果你想要按地址分组的文档数,你可以在管道中使用这个 $group 阶段(在这种情况下 $count 是一个聚合累加器,所以它不带任何参数):
[
{
$group: {
"_id": "$address",
"total": {
$count: {}
}
}
}
]
这应该会给你一些这样的结果:
{_id: address1, total: 6}
{_id: address2, total: 1}