【问题标题】:Query multiple elements in nested JSON Document查询嵌套 JSON 文档中的多个元素
【发布时间】:2015-02-05 23:16:32
【问题描述】:

我在 MongoDB 中有以下示例数据:

{
    "_id" : ObjectId("54833e93ade1a1521a2a2fe8"),
    "fname" : "yumi",
    "mname" : "sakura",
    "lname" : "kirisaki",
    "consultations" : [
        {
            "medications" : [
                "paracetamol",
                "ibuprofen",
                "carbocisteine"
            ],
            "diagnosis" : [
                "sore throat",
                "fever",
                "cough"
            ],
            "date" : ISODate("2014-12-01T16:00:00Z")
        },
        {
            "medications" : [
                "paracetamol",
                "carbocisteine",
                "afrin"
            ],
            "diagnosis" : [
                "cough",
                "colds",
                "fever"
            ],
            "date" : ISODate("2014-12-11T16:00:00Z")
        }
    ]
}
{
    "_id" : ObjectId("54833e93ade1a1521a2a2fe9"),
    "fname" : "james",
    "mname" : "legaspi",
    "lname" : "reyes",
    "consultations" : [
        {
            "medications" : [
                "zanamivir",
                "ibuprofen",
                "paracetamol"
            ],
            "diagnosis" : [
                "influenza",
                "body aches",
                "headache"
            ],
            "date" : ISODate("2014-10-22T16:00:00Z")
        },
        {
            "medications" : [
                "carbocisteine",
                "albuterol",
                "ibuprofen"
            ],
            "diagnosis" : [
                "asthma",
                "cough",
                "headache"
            ],
            "date" : ISODate("2014-11-13T16:00:00Z")
        }
    ]
}

我正在尝试使用 zanamivir AND ibuprofen AND cough 查询患者:

db.patient.find({
    $and:
        [
            {"consultations.medications":["zanamivir", "ibuprofen"]},
            {"consultations.diagnosis":"cough"}
        ]
}).pretty()

因此,在简短的样本数据中,我希望 james 会被返回,因为他是唯一一个使用 zanamivir 药物的人。

当我在cmd 中输入上述查询时,什么都没有发生。它只是转到下一行(没有语法错误等)

我必须如何进行查询?

【问题讨论】:

    标签: json mongodb mongodb-query


    【解决方案1】:

    很简单,这只是您查询的第一部分。

    db.patient.find({
        $and:[
             {"consultations.medications":["zanamivir", "ibuprofen"]}, 
             {"consultations.diagnosis":"cough"}]})
    

    要求 Mongodb 找到针对 ["zanamivir", "ibuprofen"] 的consultations.medications 是要求它找到药物等于 ['zanamivir', 'ibuprofen'] 的人。

    如果您想查找服用过扎那米韦和布洛芬药物的人,您需要将查询调整为:

    db.patient.find({
        $and:[
             {"consultations.medications":"zanamivir"}, 
             {"consultations.medications":"ibuprofen"}, 
             {"consultations.diagnosis":"cough"}]})
    

    享受吧!

    【讨论】:

    • 也感谢您采用这种方法。很高兴知道。赞成。 ;)
    【解决方案2】:

    您需要使用$all 运算符。

    db.patient.find({ 
        "consultations.medications": { "$all" : [ "zanamivir", "ibuprofen" ]},
        "consultations.diagnosis": "cough"
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2014-09-25
      • 2018-03-09
      • 1970-01-01
      • 2023-02-25
      • 2021-11-12
      • 1970-01-01
      相关资源
      最近更新 更多