MongoDB 在指针引用上使用 $group 和 $count 聚合管道 returns 错误数据
MongoDB Aggregate pipeline with $group and $count on a Pointer reference returns wrong data
我在 MongoDB 中有一组数据 parse-server 格式如下-
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.3
mongodb: 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 });
我在 MongoDB 中有一组数据 parse-server 格式如下-
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.3 mongodb: 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 });