在数组 Mongoose 中搜索对象
Posted
技术标签:
【中文标题】在数组 Mongoose 中搜索对象【英文标题】:Search for an object in an array Mongoose 【发布时间】:2017-05-21 08:00:22 【问题描述】:假设我有一个名为部门的模型。我有一个带房间的数组,每个房间都有一个病人(有一个病人)。
我想用等于请求 id 的患者编号来获取患者。有没有办法做到这一点?
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);
);
);
【问题讨论】:
欢迎来到 Stack Overflow。为了能够为您提供一些帮助,如果提供您为找到解决方案所做的尝试将会很有帮助。另外,您可能想Read This Help Article。 【参考方案1】:您可以在投影中使用 $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);
);
);
或$
positional operator
//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);
);
);
【讨论】:
我现在有病人,但如果我也能得到那个病人的治疗,那就太好了。现在我得到了除治疗外的所有患者属性。 我在使用聚合框架时也得到了治疗,谢谢! 您也介意检查一下这个问题吗? ***.com/questions/41509547/… 基本上需要做的是编辑此患者信息并将其发布回 mongoDB【参考方案2】:你可以试试这个
//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);
);
);
【讨论】:
几乎,这将把我的房间和病人还给整个科室。但我只需要病人回来。 哦。您只想返回患者对象吗? 是的,如果可能的话:) 你可以使用 unwind 然后 好吧,我猜@chridam 已经为你解答了。请参考。以上是关于在数组 Mongoose 中搜索对象的主要内容,如果未能解决你的问题,请参考以下文章