我有两个模式,一个模式是Order的模式,另一个模式是建立模式。
订购模式:
const orderSchema = new Schema({
buyer: {type:Schema.Types.ObjectId,ref: "User"},
seller: {type:Schema.Types.ObjectId,ref: "Establishment"},
amount: {type: Number},
tax: {type: Number},
returned_products: [
{
product:{type:Schema.Types.ObjectId,ref: "Product"},
quantity:{type: Number},
status:{type:String,default:"pending"}
}
],
products:[
{
product:{type:Schema.Types.ObjectId,ref: "Product"},
quantity:{type: Number},
_id:false
}
],
created_at:{type: Date,default: new Date()},
updated_at:{type: Date,default: new Date()}
})
建立架构:
const establishmentSchema = new Schema({
name: { type: String, required: true },
address: { type: String, required: true },
location: {
type: { type: String },
coordinates: [Number]
},
email:{type:String,required:true},
phone:{type:String, required:true},
photo_url:{type: String},
schedule:{type: Array, required:true},
supervisors:[
{type:Schema.Types.ObjectId,ref: "User"}
],
company:{type:Schema.Types.ObjectId,ref: "Company"},
created_at:{type: Date,required:true,default: Date.now},
updated_at:{type: Date,required:true,default: Date.now}
})
我要查询的是我的登录用户是否出现在主管列表中,机构架构的主管列表是一个使用User模型进行引用的数组。我正在尝试这样做:
db.getCollection('establishments').find({supervisors: {$in:["5b58ef22bfee4a4589fbb6ba"]}})
这是我在mongo控制台上运行的命令,该命令返回我的行,当我尝试对mongoose进行相同操作时,此命令失败并始终返回null:
var establishment=await Establishment.find({ "supervisors": {"$in": [mongoose.Types.ObjectId(req.userInformation._id)]} });
我该如何解决我的问题?我有一天试图解决此问题,我可以找到解决方案。我正在进行最简单的查询,但我想做这样的事情:
查询订单架构,并且仅当建立架构的主管列表中有登录用户时才匹配。
如果您可以帮助您,将非常高兴!
答案 0 :(得分:0)
您可以使用$elemmatch:
db.getCollection('establishments').find({
supervisors:{
$elemMatch:{
$eq : ObjectId("5b58ef22bfee4a4589fbb6ba")
}
}
});