嵌入式文档中的Mongoose搜索返回空数组

时间:2016-03-29 02:56:25

标签: node.js mongodb mongoose

医学模型领域:

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时返回所有列表,它返回genericNamebrandNamemanufacturer或{{}的所有匹配查询1}}。

我在distributor的第一次查询中遗漏了什么?

0 个答案:

没有答案