【问题标题】:Mongoose $or condition for nested array嵌套数组的猫鼬$或条件
【发布时间】:2021-06-29 04:24:39
【问题描述】:

有我的架构

//ProjectModel
const ProjectSchema: Schema = new Schema(
 owner: { type: Schema.Types.ObjectId, ref: "User" },
 users: [{type: Schema.Types.ObjectId, ref: "ProjectUser", unique: true }]
);

//Project User model
const ProjectUserSchema = new Schema(
  {
    user: { type: Schema.Types.ObjectId, ref: "User", require: true },
    role: {
      type: String,
      default: 'basic',
      enum: ["basic", "projectuser", "moderator", "admin"]
    },
    project: { type: Schema.Types.ObjectId, ref: "Project", require: true },
  },
  {
    timestamps: true,
    usePushEach: true,
  }
);

User 模型具有常用字段,如密码、姓名等。

我想在 所有者 (UserSchema)用户 (ProjectUserSchema) 中查找 ProjectModel用户强>

ProjectModel.findOne()
                    .or([{ owner: req.params.user }, { "users.user": req.params.user }])
                    .then(project => {
                        res.json(project);
                    });

但它返回 null。条件.or([{ owner: req.params.user }, { "users._id": "PROJECT USER ID" }]) 也不起作用。

我该怎么办?

【问题讨论】:

  • 嗨,AIT。请从ProjectSchema / projects 收藏中发布一些文件。谢谢。

标签: javascript mongodb express mongoose mongodb-query


【解决方案1】:

您需要将传入的req.params.user 从字符串转换为ObjectId。试试这个:

const mongoose = require('mongoose');

const getProjectByUser = (req, res) => {
  let userId = mongoose.Types.ObjectId(req.params.user);

  ProjectModel
    .findOne({
      $or: [
        { "owner": userId },
        { "users": userId }
      ]
    })
    .then(project => {
      res.json(project);
    })
    .catch(e => {
      res.json({ error: "Error!" });
    });
}

【讨论】:

  • 应该是“users.user”
  • 为什么?它不是 ProjectSchema 中看到的嵌套对象。
  • ownerUser 类型,usersProjectUser 类型。 ProjectUser 包含 user 类型的字段 User
  • 我相信users 内的ProjectSchema 数组将是ObjectIds 的数组。在这里查看:mongoosejs.com/docs/populate.html
  • 是的,但它不是User 的数组,而是ProjectUser 具有以下字段的数组:userroleproject。它的结构可以是users[0].role, users[0].user, ...
猜你喜欢
  • 2016-11-14
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2021-10-17
  • 2013-11-24
  • 2021-10-17
相关资源
最近更新 更多