MONGODB MULTI PARAMETER搜索查询

时间:2016-06-29 10:52:33

标签: 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: { 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
}
 );

应用程序背景类似于Airbnb / Roomi应用程序,用户可以在其中提供房间/地点租金。现在我想为用户找到房间的appropriae列表实现过滤器。

这里的creatorId,规则,amneties是其他模式的refIds。我想写一个查询,它会根据几个参数给我列表, 例如用户可以在req查询中传递规则,定价信息,一些amneties,性别等。 查询参数取决于用户的意愿。 有没有办法像这样做嵌套查询?就像我们在SQL中做的那样。

1 个答案:

答案 0 :(得分:0)

嗯,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>})

mongodb中没有连接,你仍然可以在mongoose调用它们时加入“连接”,但它们正在你的服务器上发生,并且每个人都需要往返服务器。

如果您仍希望使用对amneties集合的引用,则应首先查询它并在其上填充Listing对象。