gpt4 book ai didi

node.js - 在 mongoose 中查找相对于我的坐标在 10 英里半径内的附近用户

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:23 25 4
gpt4 key购买 nike

我面临着使用 mongoose 进行 MongoDB 地理空间查询的问题。我有一个具有以下架构的用户文档。我希望所有用户都在 10 英里内,例如:如果我的坐标是 [77.07361279999999, 28.4770304],那么我希望所有用户都在半径 10 英里内

我正在关注这个文档: link

const pointSchema = {
PointType: {
type: String,
enum: ['Point'],
required: true
},
coordinates: {
type: [Number],
required:true
}
};

let userFields = {
userName: {
type: String,
index: true,
unique: true,
required: true,
lowercase: true,
},
gender: {
type: String,
enum: ['male', 'female']
},
currentLocation: {
type: pointSchema,
index: true,
unique: true,
}
};

let userSchema = new SCHEMA(Object.assign({}, userFields), { runSettersOnQuery: true });
let userModel = MONGOOSE.model('User', userSchema);

我的查询是:

let recommendationList = userModel.find({
currentLocation: {
$nearSphere: {
$geometry: {
type: 'Point',
coordinates: [77.07361279999999, 28.4770304],
},
$maxDistance: 10
}
}
});

最佳答案

所以在浏览完文档之后 here好吧,我终于明白你做错了什么了,你犯的错误很少。

您需要将架构更改为

const pointSchema = {
type: {
type: String,
enum: ['Point'],
required: true
},
coordinates: {
type: [Number],
required:true
}
};

并将 EnsureIndexes 添加到您的模型

userModel.ensureIndexes({ 'currentLocation': '2dsphere' });

最后在你的 Controller 中你应该像这样查询你的模型

let recommendationList = await userModel.aggregate([
{
$geoNear: {
near: {
type: 'Point',
coordinates: userObj.currentLocation.coordinates
},
spherical: true,
maxDistance: 10 * 1609.34,
distanceMultiplier: 1,
distanceField: 'distance',
limit: 1,
query : {
gender: userObj.userPreference.datingPreferenceGender
}
}
}
]);

关于node.js - 在 mongoose 中查找相对于我的坐标在 10 英里半径内的附近用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55953681/

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