elemMatch与Mongoose中的其他查询字段结合使用

 踏实小青年 发布于 2023-02-12 19:26

样本数据:

[{
    "_id": "529532bee0ea703842000003",
    "patientId": "123",
    "name": {
        "firstName": "John",
        "family": "Smith"
    },
    "diet": [{
        "_id": "1",
        "mealtType": "Break Fast",
        "timeofMeal": "2013-11-12T03:05:06.000Z",
        "status": "I",
        "calorie": {
            "value": 500,
            "unit": "cals"
        }
    },
    {
        "_id": "1",
        "mealtType": "Break Fast",
        "timeofMeal": "2013-11-12T03:05:06.000Z",
        "status": "A",
        "calorie": {
            "value": 550,
            "unit": "cals"
        }
    }]
}]

我想在节点中使用mongoose仅获取给定patientId('123')的活动(状态'A')嵌入文档(饮食文档).

这是我的猫鼬查询:

query.where('patientId', 123)
     .where('diet').elemMatch(function(elem) {
    elem.where('_id', 1)
    elem.where('status', 'A')
})

Mongoose在查询下面生成,它为患者提供嵌入式阵列饮食中的所有元素.

Mongoose: patients.find({ diet: { '$elemMatch': { _id: '1', status: 'A' } }, patientId: '123' })

无论Mongo Shell的状态如何,上面的查询都会获取所有子文档.

他们只有通过将每个条件包裹在条件{'patientId':'123'},{'diet':{$ elemMatch:{'status':'A'}}}中,才能使它在Mongo shell中运行.

db.patients.find({'patientId':'123'},{'diet' : { $elemMatch : {'status':'A'} }} ).pretty() // works fine 

我如何强制Mongoose将每个查询字段括在花括号或任何其他想法中?

1 个回答
  • 在您的查询中,该$elemMatch对象不是另一个查询条件,而是输出字段选择(即投影)参数find.

    要在Mongoose中执行相同的操作,您可以执行以下操作:

    PatientsModel.find({patientId: '123'}, {diet: {$elemMatch: {'status': 'A'}}}, cb)
    

    要么

    PatientsModel
        .where('patientId', '123')
        .select({diet: {$elemMatch: {'status': 'A'}})
        .exec(cb);
    

    2023-02-12 19:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有