来自云代码的聚合管道不返回任何内容
Aggregate pipeline from cloud code not returning anything
对解析云代码进行的聚合调用未提供所需的结果。我不确定这是否是我们正在使用的语法的问题,或者是否有一些遗漏的东西我们需要让管道聚合调用正常工作。
对于所需的聚合调用,我们正在构建一个使用五个不同阶段的管道。在这五个阶段中,我们使用了以下四个函数:addFields
、lookup
、unwind
和 group
。这已经在 MongoDB 指南针应用程序上进行了测试,结果显示正确。导出聚合并转换为我们认为正确的语法后,查询 return 没有结果。
仅使用一个阶段的简单聚合管道运行良好。这已经针对 group by 和 addField 调用进行了测试。似乎只要将多个阶段添加到管道中就会出现故障。
直接从MongoDB Compass导出到Node产生的聚合调用,如下
[
{
'$addFields': {
'user': {
'$substr': [
'$_p_pUser', 6, -1
]
}
}
}, {
'$lookup': {
'from': '_User',
'localField': 'user',
'foreignField': '_id',
'as': 'userobject'
}
}, {
'$addFields': {
'username': '$userobject.username'
}
}, {
'$unwind': {
'path': '$username'
}
}, {
'$group': {
'_id': '$username',
'total': {
'$sum': '$score'
}
}
}
]
以上调用转换为此处提供的语法 (https://docs.parseplatform.org/js/guide/#aggregate) 时如下所示:
var pipeline = {
addFields : { user: { $substr : ['$_p_pUser', 6, -1]} },
lookup : {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'userobject'
},
addFields : { username: '$userobject.username' },
unwind : { path: '$username' },
group : {
objectId: '$username',
total : {
$sum : '$score'
}
}
};
var pipelineResults = await gameTableQuery.aggregate(pipeline);
这没有提供任何结果。它还使用特定的字段名称 (pUser
) 而不是 _p_pUser
进行了测试(需要使查询在 MongoDB Compass 中工作)。
var pipeline = {
addFields : { user: { $substr : ['$pUser', 6, -1]} },
lookup : {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'userobject'
},
addFields : { username: '$userobject.username' },
unwind : { path: '$username' },
group : {
objectId: '$username',
total : {
$sum : '$score'
}
}
};
一个可能的问题是函数 addFields 的重复。我也尝试了同样的调用,但使用了一个 addFields 调用。
var pipeline = {
addFields :
{
user: { $substr : ['pUser', 6, -1]},
username: '$userobject.username'
},
lookup : {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'userobject'
},
unwind : { path: '$username' },
group : {
objectId: '$username',
total : {
$sum : '$score'
}
}
};
这些调用是使用云代码完成的,它们没有 return 在 MongoDB Compass 中找到的所需结果。不会因语法而抛出任何错误,只是没有结果。解析聚合调用中是否有任何限制可以解释调用失败的原因?
问题似乎是子字符串调用引起的。
在 MongoDB 罗盘中,pUser
字段被分配了一个值,需要修整才能访问 objectId
。
当尝试从解析云代码聚合中执行相同的操作时,不需要修剪,因为 pUser
包含 objectId
作为子元素。
要访问 objectId
我现在使用的是:
user : '$pUser.objectId'
而不是
user : { $substr : ['pUser', 6, -1]}
对解析云代码进行的聚合调用未提供所需的结果。我不确定这是否是我们正在使用的语法的问题,或者是否有一些遗漏的东西我们需要让管道聚合调用正常工作。
对于所需的聚合调用,我们正在构建一个使用五个不同阶段的管道。在这五个阶段中,我们使用了以下四个函数:addFields
、lookup
、unwind
和 group
。这已经在 MongoDB 指南针应用程序上进行了测试,结果显示正确。导出聚合并转换为我们认为正确的语法后,查询 return 没有结果。
仅使用一个阶段的简单聚合管道运行良好。这已经针对 group by 和 addField 调用进行了测试。似乎只要将多个阶段添加到管道中就会出现故障。
直接从MongoDB Compass导出到Node产生的聚合调用,如下
[
{
'$addFields': {
'user': {
'$substr': [
'$_p_pUser', 6, -1
]
}
}
}, {
'$lookup': {
'from': '_User',
'localField': 'user',
'foreignField': '_id',
'as': 'userobject'
}
}, {
'$addFields': {
'username': '$userobject.username'
}
}, {
'$unwind': {
'path': '$username'
}
}, {
'$group': {
'_id': '$username',
'total': {
'$sum': '$score'
}
}
}
]
以上调用转换为此处提供的语法 (https://docs.parseplatform.org/js/guide/#aggregate) 时如下所示:
var pipeline = {
addFields : { user: { $substr : ['$_p_pUser', 6, -1]} },
lookup : {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'userobject'
},
addFields : { username: '$userobject.username' },
unwind : { path: '$username' },
group : {
objectId: '$username',
total : {
$sum : '$score'
}
}
};
var pipelineResults = await gameTableQuery.aggregate(pipeline);
这没有提供任何结果。它还使用特定的字段名称 (pUser
) 而不是 _p_pUser
进行了测试(需要使查询在 MongoDB Compass 中工作)。
var pipeline = {
addFields : { user: { $substr : ['$pUser', 6, -1]} },
lookup : {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'userobject'
},
addFields : { username: '$userobject.username' },
unwind : { path: '$username' },
group : {
objectId: '$username',
total : {
$sum : '$score'
}
}
};
一个可能的问题是函数 addFields 的重复。我也尝试了同样的调用,但使用了一个 addFields 调用。
var pipeline = {
addFields :
{
user: { $substr : ['pUser', 6, -1]},
username: '$userobject.username'
},
lookup : {
from: '_User',
localField: 'user',
foreignField: 'objectId',
as: 'userobject'
},
unwind : { path: '$username' },
group : {
objectId: '$username',
total : {
$sum : '$score'
}
}
};
这些调用是使用云代码完成的,它们没有 return 在 MongoDB Compass 中找到的所需结果。不会因语法而抛出任何错误,只是没有结果。解析聚合调用中是否有任何限制可以解释调用失败的原因?
问题似乎是子字符串调用引起的。
在 MongoDB 罗盘中,pUser
字段被分配了一个值,需要修整才能访问 objectId
。
当尝试从解析云代码聚合中执行相同的操作时,不需要修剪,因为 pUser
包含 objectId
作为子元素。
要访问 objectId
我现在使用的是:
user : '$pUser.objectId'
而不是
user : { $substr : ['pUser', 6, -1]}