gpt4 book ai didi

database - 在指针引用上使用 $group 和 $count 的 MongoDB 聚合管道返回错误数据

转载 作者:搜寻专家 更新时间:2023-10-30 22:23:34 27 4
gpt4 key购买 nike

我在带有 parse-server 的 MongoDB 中有一组数据,格式如下-

 Rating => objectId, user<_User>, rating...
_User => objectId, gender<m|f|nb|na>

我一直在尝试根据用户的性别对数据进行分组,以找出有多少男性、女性、非二元或 N/A 用户进行了评分。指向 _User 的指针引用中的 user 字段。我正在使用以下聚合管道。

const pipeline = [
{
lookup: {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'user'
}
},
{
unwind: { path: '$user' }
},
{
group: {
objectId: '$user.gender',
count: {
$sum: 1
}
}
}
]
const data = await new Query('Rating').aggregate(pipeline)

结果=>

[
{
"count": 54,
"objectId": "na"
},
{
"count": 405,
"objectId": null
},
{
"count": 27,
"objectId": "f"
},
{
"count": 540,
"objectId": "m"
}
],

但是,返回的数据计数与实际数据不匹配。 实际数据库只有 27 个评级,1 f,2 na,24 m。

对于 MongoDB 开发人员,objectId 等同于 _id

我是聚合框架的新手。我做错了什么?

服务器环境-解析服务器:3.2.3mongodb:4.0.2

最佳答案

这很棘手,因为您需要了解 Parse Server 如何将数据存储在 MongoDB 中。以下查询应该可以解决您的问题:

  const query = new Parse.Query('Rating');

const pipeline = [
{
project: {
objectId: 1,
userId: { $substr: ['$_p_user', '_User$'.length, -1] }
}
},
{
lookup: {
from: '_User',
localField: 'userId',
foreignField: '_id',
as: 'user'
}
},
{
unwind: { path: '$user' }
},
{
group: {
objectId: '$user.gender',
count: {
$sum: 1
}
}
}
];

return await query.aggregate(pipeline, { useMasterKey: true });

关于database - 在指针引用上使用 $group 和 $count 的 MongoDB 聚合管道返回错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776562/

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