2016-05-03 35 views
2

这里是我的代码来获得一个平面布置图和填充这个填充上的猫鼬条件的基础上,MongoDB的

链接的所有单位请参见下面的代码:

var floorplan = Floorplan.find({ 
    project: req.params.project, 
    tower: req.params.tower, 
    isDeleted: false 
}); 
floorplan.populate('flats').exec(function(err, floorplan) { 
    if (err) { return res.send(err); } 
    if (!floorplan) { return res.status(401).json(); } 
    res.status(200).json(floorplan); 
}); 

但我想只有那些填充flats where isDeleted:false 如何实现这个?

架构布图规划的

var FloorplanSchema = new Schema({ 
    project: { type: Schema.ObjectId, ref: "Project" }, 
    flats: [{ type: Schema.ObjectId, ref: "Flat" }], 
    tower: [{ type: Schema.ObjectId, ref: "Tower" }], 
    unitType: String, 
    area: Number, 
    floorPlan2D: String, 
    floorPlan3D: String, 
    livingRoomArea: Number, 
    kitchenArea: Number, 
    balconies: Number, 
    bathRooms: Number, 
    isDeleted: { type: Boolean, 'default': false }, 
    createdAt: { type: Date, 'default': Date.now } 
}); 

架构的扁平

var FlatSchema = new Schema({ 
    tower: { type: Schema.ObjectId, ref: "Tower" }, 
    floorplan: { type: Schema.ObjectId, ref: "Floorplan" }, 
    project: { type: Schema.ObjectId, ref: "Project" }, 
    status: String, 
    floor: Number, 
    size: String, 

    superbuiltup_area: Number, 

    directionFacing: String, 
    furnishingState: String, 
    flooringType: String, 
    createdAt: { type: Date, 'default': Date.now }, 
    isDeleted: { type: Boolean, 'default': false }, 

}); 
+0

为'Floorplan'和'Flat'模型显示模式定义会很有帮助,'Flat'模型是否也有'isDeleted'属性? – chridam

+0

完成! @chridam –

回答

5

populate()方法有一个选项,其允许过滤,则可以尝试这

Floorplan 
.find({ 
    project: req.params.project, 
    tower: req.params.tower, 
    isDeleted: false 
}) 
.populate({ 
    path: 'flats', 
    match: { isDeleted: false } 
}) 
.exec(function(err, floorplan) { 
    if (err) { return res.send(err); } 
    if (!floorplan) { return res.status(401).json(); } 
    res.status(200).json(floorplan); 
}); 

Floorplan 
.find({ 
    project: req.params.project, 
    tower: req.params.tower, 
    isDeleted: false 
}) 
.populate('flats', null, { isDeleted: false }) 
.exec(function(err, floorplan) { 
    if (err) { return res.send(err); } 
    if (!floorplan) { return res.status(401).json(); } 
    res.status(200).json(floorplan); 
});