如果一个人属于一个团队,Mongodb 聚合返回

时间:2021-04-22 14:32:11

标签: javascript node.js mongodb mongoose mongoose-schema

团队:

const teamSchema = new Schema({
  name: {
    type: String,
    index: true,
    trim: true
  },
  owner: {
    type: Schema.ObjectId,
    ref: 'User',
    required: true
  },
  description: {
    type: String,
    index: true,
    trim: true
  }
}, { timestamps: true })

会员:

const memberSchema = new Schema({
  id_team: {
    type: Schema.ObjectId,
    ref: 'Team',
    required: true
  },
  id_user: {
    type: Schema.ObjectId,
    ref: 'User',
    required: true
  },
  role: {
    type: String,
    enum: roles,
    default: 'user'
  }
}, { timestamps: true })

const id_user = '6eiri59fdd0d8a2jfiff7nfnf'

  return Team.aggregate([
    {
      $lookup: {
        from: 'members',
        localField: '_id',
        foreignField: 'id_team',
        as: 'members'
      }
    },
    {
      $project: {
        name: 1,
        owner: 1,
        description: 1,
        membersCount: { $size: '$members' },
        isUserInTeam: { // <- problem
          $in: [
            id_user,
            '$members.id_user'
          ]
        }
      }
    }
  ]).then((teams) => ({
    count: teams.length,
    rows: teams
  })).then(notFound(res))
    .then(success(res))
    .catch(next)

如果特定用户(id_user 字符串类型)是否属于团队,我有以下代码应该返回我。

但我没有成功,它总是返回错误。

我也尝试了以下方法,但没有任何效果。

你能帮我一把吗?

$in: [
ObjectId(id_user),
ObjectId('$members.id_user')
]

$in: [
new ObjectId(id_user),
new ObjectId('$members.id_user')
]

const objectId = require('mongoose').Types.ObjectId

$in: [
objectId(id_user),
objectId('$members.id_user')
]

0 个答案:

没有答案
相关问题