如何查询多个条件并且这些条件是相关的

时间:2015-04-02 05:41:28

标签: mongodb pymongo

假设在症状_N 中的" A001"," A002"," A003" 表示 "鼻子过敏"

假设" Z001"," Z002" 症状_N 意味着"鼻癌"

我想找到那些患有鼻癌并且在患上癌症之前已经鼻子过敏的人。

例如,以下2条记录达到了我想要的目标。

我可以推断杰克得了“鼻子癌"在2015-04-02,

他得了鼻子过敏"在2011-04-02。

我可以使用 $或聚合运算符找到鼻子过敏记录。比如db.collection.find({"$or": OR_CONDITIONS})

我不知道如何在MongoDB中完成复合条件查询。

{
    "name": "Jack",
    "symptoms_1": "B00 ",
    "symptoms_2": "A001 ",
    "symptoms_3": "     ",
    "datetime": "2011-04-02"
},

....


{
    "name": "Jack",
    "symptoms_1": "",
    "symptoms_2": "",
    "symptoms_3": "Z001",
    "datetime": "2015-04-02"
},

1 个答案:

答案 0 :(得分:0)

您将条件放在[{},{},{},{}]数组中(因为数组是有效的json)。

db.inventory.find( { $or: [ { "symptom_1": "Z001" }, {"symptom_2": "Z002" }] })

实际上,您可能正在寻找适用于公共字段的$ in运算符

db.collection.find({ "symptom_1": { $in: ["Z001", "Z002", "A001", "A002", "A003"]});

似乎你想通过所有症状字段进行梳理,所以要同时使用$或$ in

db.collection.find({$or:
[
 {"symptom_1": { $in: ["Z001", "Z002", "A001", "A002", "A003"]}},
 {"symptom_2": { $in: ["Z001", "Z002", "A001", "A002", "A003"]}} ,
  ...
 ]} );

大括号可能不匹配,但从那开始。