gpt4 book ai didi

node.js - Mongoose $near 填充被忽略

转载 作者:可可西里 更新时间:2023-11-01 10:41:00 26 4
gpt4 key购买 nike

我希望有人能帮助我 - 我想用地理查询填充子文档以对它们进行排序:

我有这些模型(简化):

(很多文章):

   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 }
})

我的第一个查询仅查找 Position 附近的地点,效果很好:

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);
})
},

我找到靠近我的地方 - 我可以选择限制多少 - 我可以通过跳过重新加载更多

现在我想做类似的事情:

我想获取一篇文章 - 并填充存储的位置(您可以从中获取它们),然后我想按距离对位置进行排序,并可能跳过或限制响应

所以我尝试了:

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);
});
}
},

所以这个查询是有效的(没有抛出错误)但是它没有响应我想要的 - 我得到了位置但是它们是按数据库序列而不是按距离“排序”的 - 所以 $near 似乎被忽略了(没有这个查询测试带来相同的结果)但是当我过滤到其他一些工作正常的内容(比如 Name="test")时,限制也在工作,但我不能跳过这个响应的某些地方......

好吧,我希望有人能理解我并能帮助我 =)!

非常感谢!

最佳答案

所以我找到了解决问题的方法...

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

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

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

关于node.js - Mongoose $near 填充被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44301806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com