mongoose$近填充忽略

我希望有人可以帮助我 – 我想填充一个地理查询子文档sorting:

我有这些模型(简化):

(很多文章):

var articleSchema = mongoose.Schema({ places: [{ type: mongoose.Schema.Types.ObjectId, ref: "places", required: false }], someData: { type: String, required: true }, }) 

(很多地方):

 var placeSchema = mongoose.Schema({ longitudelatitude: { type: { type: String, required: true }, coordinates: [ { type: Number, required: true }, //longitude { type: Number, required: true } //latitude ]}, someData: { type: String, required: true } }) 

我的第一个查询只find位置附近的地方工作正常:

 getPlacesNearBy: function (lng, lat, skipNumber, limitNumber, callback) { Place.find({ longitudelatitude: { $near: { $geometry: { type: "Point", coordinates: [lng, lat] },}} }, null, {skip: skipNumber, limit: limitNumber}, function (err, foundPlaces) { if (err) return callback(err, null); return callback(null, foundPlaces); }) }, 

我得到了我附近的地方 – 我可以select限制多less – 我可以重新加载一些更多的跳过

现在我想做类似的事情:

我想获得一篇文章 – 并填充存储的地方(你可以得到它们),然后,我想按距离sorting的地方,也许跳过或限制响应

所以我tryed:

 getPlacesforArticle: function (articleId, lng, lat, skipNumber, limitNumber, callback) { var projection = null; Article.findById(articleId, {places: 1}).populate("places", projection, { longitudelatitude: { $near: { $geometry: { type: "Point", coordinates: [lng, lat] }, } } }, {skip: skipNumber, limit: limitNumber}).exec(function (getError, foundArticle) { if (getError) return callback(getError, null); callback(null, foundArticle.places); }); } }, 

所以这个查询正在工作(抛出没有错误),但它没有响应我想要的东西 – 我得到的地方,但他们是由数据库序列“sorting”而不是距离 – 所以$近似似乎被忽略(testing没有这个查询带来相同的结果),但是当我过滤到一些其他内容工作正常(如名称=“testing”)也极限工作,但我不能跳过这个反应的一些地方…

以及我希望有人了解我,可以帮助我=)!

非常感谢你!

所以我有我的问题的解决scheme…

https://docs.mongodb.com/manual/reference/command/geoNear/

使用db.aggregate而不是db.find!

在那里你可以定义一个单独的查询=)