医学模型领域:
var field = {
genericName: {type: String, select: true, index: true},
brandName: {type: String, select: true, index: true},
manufacturer: {type: String, select: true},
distributor: {type: String, select: true},
}
FavoriteMedicine model field:
var field = {
emrId: {type: Schema.Types.ObjectId},
medicine: {type: Schema.Types.ObjectId, ref: 'Medicine'}
}
路线来电:
localhost:3131/api/v0.1/medicine/56e6944c824b78110040c234/favorite/all?search=foobar
查询:
var re = req.query.search ? new RegExp('^' + req.query.search + '.*$', 'i') : '';
FavoriteMedicine.find()
.or([
{ 'medicine.genericName': { $regex: re }}, { 'medicine.brandName': { $regex: re }},
{ 'medicine.manufacturer': { $regex: re }}, { 'medicine.distributor': { $regex: re }}
])
.where({emrId:req.params.emr_id})
.populate({path:'medicine', model:Medicine})
.exec(function (err, meds) {
if(err){ res.status(500).json(err); return; };
res.send(meds)
})
结果:
[]
我希望这可以返回search
参数的匹配,或者如果没有search
参数,它应该返回所有条目。
同时在我的其他代码上:
在我的其他搜索查询中,我直接搜索医学模型
中的第一级字段var re = req.query.search ? new RegExp('^' + req.query.search + '.*$', 'i') : '';
Medicine.find().or([
{ 'genericName': { $regex: re }}, { 'brandName': { $regex: re }},
{ 'manufacturer': { $regex: re }}, { 'distributor': { $regex: re }}
])
.exec(function (err, meds) {
if(err){ res.status(500).json(err); return; };
res.send(meds)
})
结果(正常工作):
如果路由为/medicine/all
,则路由为/medicine/all?search=paracetamol
时返回所有列表,它返回genericName
或brandName
或manufacturer
或{{}的所有匹配查询1}}。
我在distributor
的第一次查询中遗漏了什么?