问题描述:

This is my Schema:

var ActivitySchema = new Schema({

loc: {type: [Number], index: '2dsphere'}

});

And when I try to find documents with near:

Activity.find().where('loc').near({

center: [-71.072810, 42.370227],

spherical: true

}).exec(function(err, docs){

if (err) console.log(err);

console.log(docs);

})

This is what I get:

{ [MongoError: Unable to execute query: error processing query:

ns=bunch-test.activities limit=0 skip=0 Tree: GEONEAR field=loc

maxdist=1.79769e+308 isNearSphere=1 Sort: {} Proj: {} planner

returned error: unable to find index for $geoNear query] name:

'MongoError' }

I've tried defining loc in multiple ways. For example:

loc: {

type: {

type: String,

enum: 'Point',

default: 'Point'

},

coordinates: {

type: [Number],

default: [0,0],

}

}

And querying in multiple ways too:

Activity.find({

loc: {

$nearSphere: {

$geometry: {

type: "Point" ,

coordinates: [ -71.072810, 42.370227 ]

},

$minDistance: 0,

$maxDistance: 10000,

}

}

})

or:

Activity.geoNear({

type: "Point" ,

coordinates: [ -71.072810, 42.370227 ]

},

{ maxDistance : 99999999999,

spherical : true

},

function(err, results, stats) {

console.log(results);

console.log(err);

});

But the result is always the same message:

unable to find index for $geoNear query

Any suggestion? Thanks.

网友答案:

The problem was happening only while testing with Mocha. My after(function(done)}); was dropping the entire database at the end of every test file and the indexes where not being created again for the next test.

I solved it by replacing mongoose.connection.db.dropDatabase with Model.remove({}, callback);

相关阅读:
Top