Node.js 仅包括与另一路径的值相关的Mongoose模式的路径
假设我有这样一个模式:Node.js 仅包括与另一路径的值相关的Mongoose模式的路径,node.js,mongoose,schema,mongoose-schema,Node.js,Mongoose,Schema,Mongoose Schema,假设我有这样一个模式: 模式({ 用户名:String, 特权:{ 类型:字符串, 枚举:[“管理员”、“专业”、“用户”、“来宾”], 必填项:false, 默认值:“用户” }, 标记类型:{//一个小标记,显示在站点上用户名旁边。 ///??? } }); 对于tagType,如果privilege是admin,我希望能够定义如下内容: { color: String, image: String, text: { type: String,
模式({
用户名:String,
特权:{
类型:字符串,
枚举:[“管理员”、“专业”、“用户”、“来宾”],
必填项:false,
默认值:“用户”
},
标记类型:{//一个小标记,显示在站点上用户名旁边。
///???
}
});
对于tagType
,如果privilege
是admin
,我希望能够定义如下内容:
{
color: String,
image: String,
text: {
type: String,
required: true,
enum: ["I'm the highest rank", "I'm an admin", "Admin privileges are great"]
},
dateAdded: Date
}
同时,如果privilege
是pro
:
{
color: String,
text: {
type: String,
required: false,
enum: ["This website is great", "I'm am a Pro user", "I get a nice tag!"],
default: "This website is great"
},
dateAdded: Date
}
同时,对于所有用户
或来宾
条目,不允许有任何选项
这种动态交叉检查可能吗?我已经试着通读了,但尽管其中的内容似乎复杂得多,但我找不到任何方法来实现这一点。您可以使用 使用此模型和架构,您可以创建标记类型为的用户,它将被忽略 创建用户的示例代码:
const User = require("../models/user");
router.post("/user", async (req, res) => {
let result = await User.create(req.body);
res.send(result);
});
请求主体样本:
{
"username": "user 1",
"tagType": {
"color": "red",
"text": "I'm an admin"
}
}
答复:
{
"privilege": "user",
"_id": "5dfa07043a20814f80d60d6b",
"username": "user 1",
"__v": 0
}
创建管理员的请求示例:(注意,我们添加了“特权”:“admin”
)
响应:(注意标记类型已保存)
谢谢你的回答和解释!
{
"privilege": "user",
"_id": "5dfa07043a20814f80d60d6b",
"username": "user 1",
"__v": 0
}
{
"username": "admin 1",
"privilege": "admin",
"tagType": {
"color": "red",
"text": "I'm an admin"
}
}
{
"_id": "5dfa07a63a20814f80d60d6d",
"privilege": "admin",
"username": "admin 1",
"tagType": {
"color": "red",
"text": "I'm an admin",
"dateAdded": "2019-12-18T11:04:06.461Z"
},
"__v": 0
}