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集合的引用,则应首先查询该集合并在其上填充列表对象