mongoose 获取有权访问圈子的用户

taor4pac  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(103)

我有以下用户架构

const mongoose = require("mongoose");
const validator = require("validator");
const userSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: [true, "Name is required"],
      trim: true,
    },

    email: {
      type: String,
      required: [true, "Email is required"],
      validate: validator.isEmail,
      trim: true,
    },

  },

  {
    timestamps: true,
  }
);
module.exports = userSchema;

我有以下圆的图式

const mongoose = require("mongoose");
const circlesSchema = new mongoose.Schema(
  {
    circleName: {
      type: String,
      required: [true, "Circle name is required"],
      trim: true,
      unique: [true, "Circle name is already exists"],
    },

    blockedUsers: [{ type: mongoose.Schema.Types.ObjectId, ref: "Users" }],
  },
  {
    timestamps: true,
  }
);
module.exports = circlesSchema;

在Circle模式中有字段blockedUsers数组,如果用户objectID在这个数组中,则意味着用户没有访问这个圈子的权限。现在我想获取所有具有访问圈子权限的用户及其名称。我是Mongodb的新手,正在寻找工作mongo查询。

5anewei6

5anewei61#

为此,您必须执行两个查询。

const circle = await Circle.findOne({ circleName: 'My Circle' }).select('blockedUsers').lean();

const users = await User.find({ _id: { $nin: circle.blockedUsers } }).select('name');

您也可以使用单个聚合管道来实现这一点,但维护成本超过了好处。
此外,我建议您阅读those blog posts以进行模式设计,您当前的模式设计可能会因为大量(数十万)被阻止的用户而中断。

相关问题