如何在引用的文档数组中使用$ in或$ all函数进行查询。猫鼬和Node JS

时间:2018-08-17 18:56:22

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

我有两个模式,一个模式是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)]} });

我该如何解决我的问题?我有一天试图解决此问题,我可以找到解决方案。我正在进行最简单的查询,但我想做这样的事情:

查询订单架构,并且仅当建立架构的主管列表中有登录用户时才匹配。

如果您可以帮助您,将非常高兴!

1 个答案:

答案 0 :(得分:0)

您可以使用$elemmatch

db.getCollection('establishments').find({
  supervisors:{
    $elemMatch:{
      $eq : ObjectId("5b58ef22bfee4a4589fbb6ba")
    }
  }
});