Reputation: 33
I have collection with document like this:
{
...
"CurrentLocation" : {
"type" : "Point",
"coordinates" : [
-92.48436693078111,
35.85223020932276
]
}
...
}
And I need to make a "$near" query with two possible center points:
db.Truck.find({
"$or": [{
"DestinationLocation": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [-117.256875, 41.856405]
},
"$maxDistance": 100000.0
}
}
}, {
"DestinationLocation": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [-112.256875, 40.856405]
},
"$maxDistance": 100000.0
}
}
}]
})
Mongo returns me an error:
error:
{
"$err" : "Can't canonicalize query: BadValue Too many geoNear expressions",
"code" : 17287
}
Is there any way to request $near with two points except data union on the application side? Thanks.
Upvotes: 3
Views: 1809
Reputation: 14469
Mongo DB accepts only one NEAR. And if there is a NEAR, it must be either the root or the root must be an AND and its child must be a NEAR. See https://github.com/mongodb/mongo/blob/master/src/mongo/db/query/canonical_query.cpp#L364
If you need that $or
operation with two $near
, try to make two queries and integrate the results from them.
Upvotes: 7
Reputation: 24
An example with $or
db.Truck.find({
"DestinationLocation": {
"$or":[{
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [-117.256875, 41.856405]
},
"$maxDistance": 100000.0
}
},{
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [-112.256875, 40.856405]
},
"$maxDistance": 100000.0
}
}]
}
})
Upvotes: -1