我的数据库中有两个模型,Room模型和Block模型
会议室架构
var RoomSchema = new Schema({
name: String,
floor: { type: Number, min: 0},
capacity: { type: Number, min: 0},
free: { type: Number, min: 0},
block: {type: mongoose.Schema.Types.ObjectId, ref: 'Block'}
});
块架构
var BlockSchema = new Schema({
name: String,
type: Boolean, // 0->man, 1->woman
rooms: [{type: mongoose.Schema.Types.ObjectId, ref: 'Room'}]
});
我想检索属于类型为false的块的所有房间(男人的房间), 所以如果我在pseduo sql中写这个就像
select * from rooms
left join blocks on blocks.id = romms.block_id
where blocks.type = false;
在查询返回后立即过滤房间实体,因为它会改变分页数据而无法工作。
任何帮助表示赞赏!!
答案 0 :(得分:2)
这必须在mongodb中作为两个单独的查询来完成,因为它不是关系数据库。
首先执行块查询:
db.blocksCollection.find({type : false})
这将返回false类型的数组。
这可以使用$in
运算符查询这些区域中房间的房间集合:http://docs.mongodb.org/manual/reference/operator/query/in/
db.roomsCollection.find({block : { $in : [block1,block2,etc...]}})
答案 1 :(得分:1)
当您使用Mongoose的 populate 方法时,您可以使用单个查询执行此操作,该方法是使用其他集合中的文档自动替换文档中的指定路径的过程( S)。例如,您可以使用查询构建器填充块的房间:
var query = { "type": false };
Block.find(query)
.select('-_id -name -type')
.poulate('rooms')
.exec(function (err, res){
console.log('The first room is %s', res[0].rooms[0].name);
})