我有这些文件:
{
"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
}
]
}
我该怎么做?
答案 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;和"加入"女性也遇到了元素中的年龄限制。