Node.js 在MongoDB聚合中创建计算字段

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中我很难理解它。这是我现在拥有的。

专家们

我是新手,正在尝试在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变成一个空数组:

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' },
  },
},

]))

您能发布一些示例数据和预期输出吗?是否有助于您进行条件求和?我帮了忙,而且成功了。谢谢,瓦曼。