[英]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.