按条件

时间:2018-05-24 09:37:58

标签: mongodb mongodb-query

我有这些文件:

{
    "people" : [
        {
            "Gender" : "Male",
            "Age" : 31
        },
        {
            "Gender" : "Female",
            "Age" : 22
        }
    ]
}
{
    "people" : [
        {
            "Gender" : "Male",
            "Age" : 31
        },
        {
            "Gender" : "Female",
            "Age" : 24
        }
    ]
}
{ 
    "people" : [ 
        { 
            "Gender" : "Male",
            "Age" : 31
        }
    ]
}

现在我要检索 IF 女人的所有文件,然后这位女士必须 22 。因此,无论年龄和所有年龄= 22岁的女性,都必须归还所有男性:

{
    "people" : [
        {
            "Gender" : "Male",
            "Age" : 31
        },
        {
            "Gender" : "Female",
            "Age" : 22
        }
    ]
}
{ 
    "people" : [ 
        { 
            "Gender" : "Male",
            "Age" : 31
        }
    ]
}

我该怎么做?

1 个答案:

答案 0 :(得分:2)

你基本上需要一个$or条件,其中一个选项否定"Female"在任何数组元素中都是性别而另一个条件只匹配那些使用{{3}的年龄限制的条件}:

db.collection.find({
  "$or": [
    { 
      "people.Gender": { "$eq": "Male", "$ne": "Female" }
    },
    {
      "people": {
        "$elemMatch": {
          "Gender": "Female",
          "Age": 22
        }
      }
    }
  ]
})

返回两个文件:

{
        "_id" : ObjectId("5b06898bfb4739ed7db59c18"),
        "people" : [
                {
                        "Gender" : "Male",
                        "Age" : 31
                },
                {
                        "Gender" : "Female",
                        "Age" : 22
                }
        ]
}
{
        "_id" : ObjectId("5b06898bfb4739ed7db59c1a"),
        "people" : [
                {
                        "Gender" : "Male",
                        "Age" : 31
                }
        ]
}

使用"people.Gender"作为数组上所有值的路径,我们可以使用$elemMatch测试"Male",使用$eq测试"Female"表示有& #34;仅"男性礼物。

$ne然后允许"替代"约束,如果数组元素具有"Female",则其年龄必须为22。所以你只能得到那些只有男性的#34;和"加入"女性也遇到了元素中的年龄限制。