search数组Mongoose中的对象

假设我有一个叫做部门的模型。 我有一个房间arrays,每个房间都有一个病人(有病人)。

我想让耐心等待请求的病人。 有没有办法做到这一点?

var department = mongoose.model('department', { departmentName: String, rooms: [ { roomNumber: String, width: Number, height: Number, posX: Number, posY: Number, sanitary: Boolean, childcareArea: Boolean, lounge: Boolean, patient: { patientnr: Number, firstname: String, lastname: String, reasonOfHospitalization: String, dateOfHospitalization: Date, expectedDateOfDischarge: Date, vegetarian: Boolean, needsHelp: Boolean, comments: String, department: String, roomNumber: String, nextTreatment: { type: String, shortDescription: String, timestamp: Date } } } ] }); //get patient with id app.get('/api/departments/patients/:id', function(req, res) { department.find({"patient": {$all :[60022]}}, function (err, patient) { if (err) res.send(err) res.json(patient); }); }); 

您可以在您的投影中使用$elemMatch ,如下所示:

 //get patient with id app.get('/api/departments/patients/:id', function(req, res) { department.findOne( { "rooms.patient.patientnr": parseInt(req.params.id) }, { "rooms": { "$elemMatch": { "patient.patientnr": parseInt(req.params.id) } } }, function (err, dept) { if (err) res.send(err) var patient = dept.rooms[0].patient; res.json(patient); } ); }); 

$ position操作符

 //get patient with id app.get('/api/departments/patients/:id', function(req, res) { department.findOne( { "rooms.patient.patientnr": parseInt(req.params.id) }, { "rooms.$": 1 }, function (err, dept) { if (err) res.send(err) var patient = dept.rooms[0].patient; res.json(patient); } ); }); 

或使用聚合框架:

 //get patient with id app.get('/api/departments/patients/:id', function(req, res) { department.aggregate( [ { "$match": { "rooms.patient.patientnr": parseInt(req.params.id) } }, { "$project": { "room": { "$arrayElemAt": [ { "$filter": { "input": "$rooms", "as": "room", "cond": { "$eq": [ "$$room.patient.patientnr", parseInt(req.params.id) ] } } }, 0 ] } } } ], function (err, results) { if (err) res.send(err) var patient = results[0].room.patient; res.json(patient); } ); }); 

你可以试试这个

 //get patient with id app.get('/api/departments/patients/:id', function(req, res) { var id = req.params.id; department.find({"rooms.patient.patientnr": id}, function (err, patient) { if (err) res.send(err) res.json(patient); }); });