简体   繁体   English

Mongoose $或嵌套数组的条件

[英]Mongoose $or condition for nested array

There are my schemas有我的模式

//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,
  }
);

The User model has common fields like password, name, etc.用户model 具有密码、名称等常用字段。

I want to find User of a ProjectModel either among the owner (UserSchema) or among users (ProjectUserSchema)我想在所有者(UserSchema)用户(ProjectUserSchema)中找到ProjectModel用户

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

But it returns null.但它返回 null。 And condition .or([{ owner: req.params.user }, { "users._id": "PROJECT USER ID" }]) doesn't work either.条件.or([{ owner: req.params.user }, { "users._id": "PROJECT USER ID" }])也不起作用。

What should I do?我应该怎么办?

You need to convert the incoming req.params.user from string to ObjectId .您需要将传入的req.params.user从字符串转换为ObjectId Try this:尝试这个:

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!" });
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM