Node.js 在MongoDB聚合中创建计算字段
专家们 我是新手,正在尝试在MongoDB聚合中创建一个计算字段。我收集了名为Player、Response和Clue的集合。响应表有3个字段(除了它自己的_id): PID:给出响应的玩家的id QID:被回应线索的_id 位置:如果响应不正确,则为0,否则为正整数(对应于响应顺序,因此第一个正确的响应得到位置1) 我如何计算玩家给出的正确回答的数量?这在SQL查询(sum(place>0然后1 else 0 end时的情况)中是显而易见的,但在MongoDB中我很难理解它。这是我现在拥有的。实际上,这段代码可以工作,并为每个玩家提供正确的尝试次数,但是当我取消注释注释注释掉的$project步骤(以及正确答案:{$sum:'$correct'})时,ans变成一个空数组:Node.js 在MongoDB聚合中创建计算字段,node.js,mongodb,Node.js,Mongodb,专家们 我是新手,正在尝试在MongoDB聚合中创建一个计算字段。我收集了名为Player、Response和Clue的集合。响应表有3个字段(除了它自己的_id): PID:给出响应的玩家的id QID:被回应线索的_id 位置:如果响应不正确,则为0,否则为正整数(对应于响应顺序,因此第一个正确的响应得到位置1) 我如何计算玩家给出的正确回答的数量?这在SQL查询(sum(place>0然后1 else 0 end时的情况)中是显而易见的,但在MongoDB中我很难理解它。这是我现在拥有的。
const ans = await Player.aggregate([
{
$match: { PK: { $in: [2, 10] } },
},
{
$lookup: {
from: Response.collection.name,
localField: '_id',
foreignField: 'PID',
as: 'Response',
},
},
{ $unwind: '$Response' },
{
$project: {
eMail: 0,
password: 0,
passwordChangedAt: 0,
},
},
// {
// $project: {
// Correct: {
// $cond: {
// if: { $gt: ['$Response.place', 0] },
// then: 1,
// else: 0,
// },
// },
// },
// },
{
$lookup: {
from: Clue.collection.name,
localField: 'Response.QID',
foreignField: '_id',
as: 'Clue',
},
},
{
$match: {
'Clue.month': 11,
'Clue.year': 2020,
},
},
{ $unwind: '$Clue' },
{
$group: {
_id: {
fName: '$fName',
lName: '$lName',
},
attempts: { $sum: 1 },
// correctAnswers: { $sum: '$Correct' },
},
},
])) 您能发布一些示例数据和预期输出吗?是否有助于您进行条件求和?我帮了忙,而且成功了。谢谢,瓦曼。