У меня есть коллекция MongoDB со следующим документом:
{
"_id" : ObjectId("4eb479a61258ec97acd1034d"),
"places" : [
{
"coords" : [1,0],
"remaining" : 1
},
{
"coords" : [0,0],
"remaining" : 0
},
}
Я также установил составной индекс для нескольких местоположений на {places.coords: "2d", 'places.remaining':1}
Я хотел бы найти все документы, у которых place
близко к [0,0]
, а также remaining > 0
, а также coords
совпадающих мест.
Однако, запустив команду
db.runCommand(
{
'geoNear':"mycollection",
near:[0,0],
query:{'places.remaining': {'$gt': 0}},
includeLocs: true
}
)
Возвращает:
{
"ns" : "test.mycollection",
"near" : "1100000000000000000000000000000000000000000000000000",
"results" : [
{
"dis" : 0,
"loc" : {
"0" : 0,
"1" : 0
},
"obj" : {
"_id" : ObjectId("4eb479a61258ec97acd1034d"),
"places" : [
{
"coords" : [
1,
0
],
"remaining" : 1
},
{
"coords" : [
0,
0
],
"remaining" : 0
}
]
}
},
{
"dis" : 1,
"loc" : {
"0" : 1,
"1" : 0
},
"obj" : {
"_id" : ObjectId("4eb479a61258ec97acd1034d"),
"places" : [
{
"coords" : [
1,
0
],
"remaining" : 1
},
{
"coords" : [
0,
0
],
"remaining" : 0
}
]
}
}
],
"stats" : {
"time" : 0,
"btreelocs" : 0,
"nscanned" : 2,
"objectsLoaded" : 1,
"avgDistance" : 0.5,
"maxDistance" : 1.0000124312194423
},
"ok" : 1
}
т.е. в обоих местах, хотя place
с coords
[0,0]
имеет remaining = 0
.
Мое подозрение было, что запрос не имел никакого эффекта, но когда я запускаю
db.runCommand(
{
'geoNear':"mycollection",
near:[0,0],
includeLocs: true,
query:{'foo':'bar'}
}
)
места не возвращаются:
{
"ns" : "test.mycollection",
"near" : "1100000000000000000000000000000000000000000000000000",
"results" : [ ],
"stats" : {
"time" : 0,
"btreelocs" : 0,
"nscanned" : 2,
"objectsLoaded" : 1,
"avgDistance" : NaN,
"maxDistance" : 0
},
"ok" : 1
}
Кто-нибудь знает, что происходит не так? То, что я хочу, даже возможно с geoNear
? Заранее спасибо.