嵌套数组的猫鼬$或条件
Posted
技术标签:
【中文标题】嵌套数组的猫鼬$或条件【英文标题】: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
收藏中发布一些文件。谢谢。
【参考方案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
中看到的嵌套对象。
owner
是 User
类型,users
是 ProjectUser
类型。 ProjectUser
包含 user
类型的字段 User
我相信users
内的ProjectSchema
数组将是ObjectId
s 的数组。在这里查看:mongoosejs.com/docs/populate.html
是的,但它不是User
的数组,而是ProjectUser
具有以下字段的数组:user
、role
和project
。它的结构可以是users[0].role
, users[0].user
, ...以上是关于嵌套数组的猫鼬$或条件的主要内容,如果未能解决你的问题,请参考以下文章
使用没有数组的嵌套文档为我的 JSON 定义有效的猫鼬模式?