[英]Message schema that has multiple refs in mongodb using mongoose
我被困在这里,因为我不确定如何为一个对象设置多个 ref 以指定它的 objectid。
例如:(我如何将发件人指定为卖家或者它可以是用户,此外,如果有这种情况,最好的方法是什么)
const messageSchema = mongoose.Schema({
message: {
text: { type: String, required: true },
type: String, //type can be or 'message', 'image',
},
members: {
seller: {
type: mongoose.Schema.Types.ObjectId,
ref: "Seller",
required: true,
},
client: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
},
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
readOn: { type: Date },
read: Boolean, //}, {
timestamps: true,
});
我想能够说:
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: ["User", "Seller"],
required: true,
},
这可能吗? 提前非常感谢。
您可以使用refPath进行动态引用。
const messageSchema = mongoose.Schema({
sender_type: String // user or seller
sender: {
type: Schema.Types.ObjectId,
refPath: 'sender_type'
}
})
或者
你可以使用虚拟机
const messageSchema = new mongoose.Schema({
...
sender: {
type: mongoose.Schema.Types.ObjectId,
required: true
},
...
},
{
toJSON: { virtuals: true }
});
然后像这样定义虚拟模式:
order_schema.virtual('User', {
ref: 'User', // Your User model name
localField: 'sender',
foreignField: '_id',
justOne: true
});
order_schema.virtual('Seller', {
ref: 'Seller',
localField: 'sender',
foreignField: '_id',
justOne: true
});
然后在数据库操作中定义两个填充:
Model.find(search_filter)
.populate('User')
.populate('Seller')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.