根据条件在mongoose,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); }); 

但是我只想填充那些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 }, }); 

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); });