【发布时间】:2014-11-12 17:41:38
【问题描述】:
我目前正在将我们的数据库从 Mongo 2.4.9 迁移到 2.6.4。
我有一个奇怪的情况,即在 2.4 中给出良好结果的查询在 2.6 中没有返回任何文档。
有问题的查询:
var dbSearch = {
created: { $gte: new Date(1409815194808) },
geolocation: {
$geoWithin: {
$center: [ [ 4.895167900000001, 52.3702157 ], 0.1125 ]
}
}
};
在该集合上有以下(相关)索引:
{ "v" : 1, "key" : { "created" : -1 }, "name" : "createdIndex", "ns" : "prod.search", "background" : true }
{ "v" : 1, "key" : { "geolocation" : "2d", "created" : -1 }, "name" : "geolocationCreatedIndex", "ns" : "prod.search" }
对 Mongo 2.6 运行此查询会得到以下查询日志:
{ created: { $gte: new Date(1409815194808) }, geolocation: { $geoWithin: { $center: [ [ 4.895167900000001, 52.3702157 ], 0.1125 ] } } }
planSummary: IXSCAN { created: -1 } ntoreturn:0 ntoskip:0 keyUpdates:0 numYields:0 locks(micros) r:8196 nreturned:0 reslen:20 8ms
我正在使用 NodeJS 使用 node-mongodb-native 模块将此查询发送到数据库。
请注意,当我删除任一搜索字段(created 或 geolocation)时,查询将在 2.4 和 2.6 上产生正确的结果。组合(如上所示)在 2.6 上没有结果
使用额外要求的信息进行编辑
解释 mongo 2.4 查询:
> db.search.find({created: { $gte: new Date(1409815194808) }, geolocation: {$geoWithin: {$center: [ [ 4.895167900000001, 52.3702157 ], 0.1125 ] } } }).explain()
{
"cursor" : "GeoBrowse-circle",
"isMultiKey" : false,
"n" : 321,
"nscannedObjects" : 321,
"nscanned" : 321,
"nscannedObjectsAllPlans" : 321,
"nscannedAllPlans" : 321,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 69,
"indexBounds" : {
"geolocation" : [ ]
},
"lookedAt" : NumberLong(8940),
"matchesPerfd" : NumberLong(8538),
"objectsLoaded" : NumberLong(8538),
"pointsLoaded" : NumberLong(0),
"pointsSavedForYield" : NumberLong(0),
"pointsChangedOnYield" : NumberLong(0),
"pointsRemovedOnYield" : NumberLong(0),
"server" : "ubmongo24.local:27017"
}
解释 mongo 2.6 查询:
> db.search.find({created: { $gte: new Date(1409815194808) }, geolocation: {$geoWithin: {$center: [ [ 4.895167900000001, 52.3702157 ], 0.1125 ] } } }).explain();
{
"cursor" : "BtreeCursor createdIndex",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 1403,
"nscanned" : 1403,
"nscannedObjectsAllPlans" : 2808,
"nscannedAllPlans" : 2808,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 21,
"nChunkSkips" : 0,
"millis" : 8,
"indexBounds" : {
"created" : [
[
ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ"),
ISODate("2014-09-04T07:19:54.808Z")
]
]
},
"server" : "ubmongo26.local:27017",
"filterSet" : false
}
【问题讨论】:
-
你有最新的node mongo驱动吗?
-
您能否解释一下 2.4 和 2.6 并将结果添加到问题中 - 仅供参考,2.6 中的复合地理索引存在一个未解决的问题:jira.mongodb.org/browse/SERVER-14264 但与您报告的不完全相同结果
-
@AdamComerford 我在帖子中添加了解释信息。您提到的项目看起来可能是相关的。
-
@joao 是的,我用的是node-mongodb-native 1.4.12,根据github应该是最新的
标签: mongodb mongodb-query