我在一个集合中运行一个MongoDB 3.1服务器,里面大概有160万个文档。文档看起来是这样的:MongoDB在一个庞大的数据集上返回空结果
{
"_id": { "$oid" : "123456789" },
"lastChange": "2015-02-09 13:22:27",
"startDate": "2015-02-09",
"receiptNumber" : 296,
"itemReceiptPositions": [
{
"itemId": 900064,
"listPrice": 8.99
}
]
}
我已经创建的“itemReceiptPositions.itemId”和“receiptNumber”索引:
{
"v" : 1,
"key" : {
"receiptNumber" : 1
},
"name" : "receiptNumber_1",
"ns" : "someDatabase.someCollection"
},
{
"v" : 1,
"key" : {
"itemReceiptPositions.itemId" : 1
},
"name" : "itemReceiptPositions.itemId_1",
"ns" : "someDatabase.someCollection"
}
当我搜索通过itemReceiptPositions.itemId键这个特定的文件, MongoDB找不到文档:
> db.someCollection.find({ "itemReceiptPositions.itemId" : 900064 }).count()
0
但是,每当我搜索关键字“receiptNumber”,文档被发现!即使查询
> db.someCollection.find({ "itemReceiptPositions.itemId" : { "$gt" : 0 }}).count()
返回零结果。怎么会这样?
这里是.explain()两个查询的输出:
> db.someCollection.find({ "itemReceiptPositions.itemId" : 900064 }).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "someDatabase.someCollection",
"indexFilterSet" : false,
"parsedQuery" : {
"itemReceiptPositions.itemId" : {
"$eq" : 900064
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"itemReceiptPositions.itemId" : 1
},
"indexName" : "itemReceiptPositions.itemId_1",
"isMultiKey" : true,
"direction" : "forward",
"indexBounds" : {
"itemReceiptPositions.itemId" : [
"[900064.0, 900064.0]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "someHost",
"port" : 1234,
"version" : "3.1.0-pre-",
"gitVersion" : "bbd95ca6a8b538b4cffece0b9d9c3ed811a455a7"
},
"ok" : 1
}
和
> db.someCollection.find({ "receiptNumber" : 296 }).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "someDatabase.someCollection",
"indexFilterSet" : false,
"parsedQuery" : {
"receiptNumber" : {
"$eq" : 296
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"receiptNumber" : 1
},
"indexName" : "receiptNumber_1",
"isMultiKey" : false,
"direction" : "forward",
"indexBounds" : {
"receiptNumber" : [
"[296.0, 296.0]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "someHost",
"port" : 1234,
"version" : "3.1.0-pre-",
"gitVersion" : "bbd95ca6a8b538b4cffece0b9d9c3ed811a455a7"
},
"ok" : 1
}
你怎么办?你确定吗? – Sammaye 2015-03-02 14:30:35
点符号工作得很好 – lascort 2015-03-02 14:32:50
@ZeMoon:谢谢,但这并没有解决它:(它仍然没有找到任何文件 – soner 2015-03-02 14:39:13