Node.js MONGODB多参数搜索查询

Node.js MONGODB多参数搜索查询,node.js,mongodb,express,Node.js,Mongodb,Express,我有以下模式: var ListingSchema = new Schema({ creatorId : [{ type: Schema.Types.ObjectId, ref: 'User' }],//LISTING CREATOR i.e. specific user roommatePreference: { //preferred things in roommate age: {//age preferences if any early20s: { ty

我有以下模式:

var ListingSchema = new Schema({


creatorId :  [{ type: Schema.Types.ObjectId, ref: 'User' }],//LISTING CREATOR i.e. specific user
roommatePreference: { //preferred things in roommate
    age: {//age preferences if any
        early20s: { type: Boolean, default: true },
        late20s: { type: Boolean, default: true },
        thirtys: { type: Boolean, default: true },
        fortysAndOld: { type: Boolean, default: true }
    },
    gender: {type:String,default:"Male"}
},

roomInfo: {//your own location of which place to rent
    address: {type:String,default:"Default"},
    city: {type:String,default:"Default"},
    state: {type:String,default:"Default"},
    zipcode: {type:Number,default:0},

},

location: {//ROOM LOCATION
            type: [Number],  // [<longitude>, <latitude>]
            index: '2d'      // create the geospatial index
    },

pricing: {//room pricing information
    monthlyRent: {type:Number,default:0},
    deposit: {type:Number,default:0},
},

availability:{//room availability information
    durationOfLease: {
        minDuration: {type:Number,default:0},
        maxDuration: {type:Number,default:0},
    },
    moveInDate: { type: Date, default: Date.now }
},


amneties :  [{ type: Schema.Types.ObjectId, ref: 'Amnety' }],


rules :  [{ type: Schema.Types.ObjectId, ref: 'Rule' }],

photos :  [{ type: Schema.Types.ObjectId, ref: 'Media' }],//Array of photos having photo's ids, photos belong to Media class

description: String,//description of room for roomi

status:{type:Boolean,default:true}//STATUS OF ENTRY, BY DEFAULT ACTIVE=TRUE
},

{
    timestamps:true
}
 );
var ListingSchema=新模式({
creatorId:[{type:Schema.Types.ObjectId,ref:'User'}],//列出创建者,即特定用户
室友偏好:{//室友中的首选项
年龄:{//年龄首选项(如果有)
20年代早期:{type:Boolean,默认值:true},
late20s:{type:Boolean,默认值:true},
三十:{type:Boolean,默认值:true},
fortysAndOld:{type:Boolean,默认值:true}
},
性别:{type:String,默认值:“男性”}
},
roomInfo:{//您自己的位置,租哪个地方
地址:{type:String,默认值:“default”},
城市:{type:String,默认值:“default”},
状态:{type:String,默认值:“default”},
zipcode:{type:Number,默认值:0},
},
位置:{//房间位置
类型:[编号],//[,]
索引:“2d”//创建地理空间索引
},
定价:{//房间定价信息
月份:{type:Number,默认值:0},
存款:{type:Number,默认值:0},
},
可用性:{//房间可用性信息
宽限期:{
持续时间:{type:Number,默认值:0},
maxDuration:{type:Number,默认值:0},
},
moveInDate:{type:Date,默认值:Date.now}
},
amneties:[{type:Schema.Types.ObjectId,ref:'Amnety'}],
规则:[{type:Schema.Types.ObjectId,ref:'Rule'}],
照片:[{type:Schema.Types.ObjectId,ref:'Media'}],//具有照片ID的照片数组,照片属于媒体类
description:String,//roomi的房间描述
状态:{type:Boolean,默认值:true}//条目状态,默认为ACTIVE=true
},
{
时间戳:真
}
);
该应用程序的背景类似于Airbnb/Roomi应用程序,用户可以在该应用程序中出租自己的房间/位置。现在我想为用户实现一个过滤器,用于查找房间的适当列表

这里creatorId、rules、amneties是其他模式的refid。我想写一个查询,根据几个参数给我列表, e、 用户可以在req查询中传递规则、定价信息、一些金额、性别等。 查询参数取决于用户的意愿。
有什么方法可以像SQL中那样进行嵌套查询吗?

好吧,mongodb并不是用来作为关系数据库的

相反,我建议将便利设施数组转换为一个对象数组,将便利设施嵌入清单模式中

因此,您可以按如下方式进行查询:

// Schema
ListSchema = mongoose.Schema({
....
amneties: [{aType: 'shower'}]

// or you can make it a simple array of strings:
// amneties: ['shower']
....
})

// query
Listings.find({'amneties.aType' : <some amenity>})
//模式
ListSchema=mongoose.Schema({
....
amneties:[{aType:'shower'}]
//也可以将其设置为一个简单的字符串数组:
//amneties:['淋浴']
....
})
//质疑
Listings.find({'amneties.aType':})
mongodb中没有连接,您仍然可以在mongoose调用它们填充时进行“连接”,但它们发生在您的服务器上,并且每个填充都需要往返到服务器

如果仍希望使用对amneties集合的引用,则应首先查询该集合并在其上填充列表对象