MongoDB查询生成或响应,而不是AND
我使用的是MongoDB 2.6.5版,我有一个类似以下内容的集合:MongoDB查询生成或响应,而不是AND,mongodb,Mongodb,我使用的是MongoDB 2.6.5版,我有一个类似以下内容的集合: { "_id": ObjectId("555a3398f4c572a44f877dcd"), "created": ISODate("2015-05-18T17:02:14.951Z"), "values": [ { "value": "4", "label": "Apple" }, { "value": "5", "label": "Peac
{
"_id": ObjectId("555a3398f4c572a44f877dcd"),
"created": ISODate("2015-05-18T17:02:14.951Z"),
"values": [
{
"value": "4",
"label": "Apple"
},
{
"value": "5",
"label": "Peach"
},
{
"value": "5",
"label": "Banana"
},
{
"value": "4",
"label": "Orange"
}
],
"__v": 0
}
{
"_id": ObjectId("555a74dbdfe135105faccdf7"),
"created": ISODate("2015-05-18T21:27:37.064Z"),
"values": [
{
"value": "2",
"label": "Apple"
},
{
"value": "3",
"label": "Peach"
},
{
"value": "4",
"label": "Banana"
},
{
"value": "5",
"label": "Orange"
}
],
"__v": 0
}
{
"_id": ObjectId("555a74f9dfe135105faccdfa"),
"created": ISODate("2015-05-18T21:27:37.064Z"),
"values": [
{
"value": "1",
"label": "Apple"
},
{
"value": "1",
"label": "Peach"
},
{
"value": "1",
"label": "Banana"
},
{
"value": "1",
"label": "Orange"
}
],
"__v": 0
}
当我尝试获取包含值的文档时,标签为“橙色”且值为“5”时,我应该返回一个文档,但得到两个:
> db.answers.count({ 'values.label':'Orange', 'values.value':'5' })
> 2
这是选择两个ID为的文档:555a3398f4c572a44f877dcd
(可能是因为Banana
也有一个值5)和555a74dbdffe135105faccdf7
(这是唯一正确的一个)。有人能想到为什么会发生这种情况吗?您正在阵列上使用(用于接触对象)。虽然它按照您描述的方式工作,但它确实暗示了OR逻辑,因为可以说,整个数组被解释为一个对象
您希望在一个数组中的文档上匹配多个条件,这就是
db.answers.count({ 'values' : { '$elemMatch' : { 'label':'Orange', 'value':'5' } } })