【发布时间】:2015-11-18 21:37:44
【问题描述】:
我正在尝试将某个位置的经度/纬度保存在我的用户模型中,并使用$geoNear 进行查询。我几乎查看了我能找到的关于该主题的所有页面,但我仍然不确定如何 1) 适当地创建模型以及如何查询它。
这是我模型的一部分:
loc: {
//type: 'Point', // see 1
//type: String, // see 2
coordinates: [Number],
index: '2dsphere' // see 3
},
@1:根据文档,如果我想存储一个点,类型必须是“点”,但它会抛出
TypeError: Undefined type `Point` at `loc`
Did you try nesting Schemas? You can only nest using refs or arrays.
这是有道理的,因为我猜应该是String
@2:这不会立即引发错误,但是当我尝试存储用户时,我得到:
name: 'ValidationError',
errors:
{ loc:
{ [CastError: Cast to String failed for value "[object Object]" at path "loc"]
@3:如果我想创建这样的索引,我会收到错误:
TypeError: Undefined type `2dsphere` at `loc.index`
Did you try nesting Schemas? You can only nest using refs or arrays.
所以我尝试将索引存储到对我来说更合适的位置,如下所示:
userSchema.index({'loc': '2dsphere'});
当我尝试保存新用户时会引发以下错误:
- { [MongoError: Can't extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }]
name: 'MongoError',
message: 'Can\'t extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }',
ok: 1,
n: 0,
code: 16572,
errmsg: 'Can\'t extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }',
writeConcernError:
{ code: 16572,
errmsg: 'Can\'t extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }' } }
MongoError: Can't extract geo keys from object, malformed geometry?:{ coordinates: [ -73.97, 40.77 ] }
当我将数据库上的模型更新为 $geoNear 命令时,我像这样更新了我的用户:
loc: {coordinates: [-73.97, 40.77]}
并且可以像这样成功查询它:
mongoose.model('users').db.db.command({
"geoNear": users,
"near": [
<latitude>,
<longitude>
],
"spherical": true,
"distanceMultiplier": 6378.1, // multiplier for kilometres
"maxDistance": 100 / 6378.1, // every user within 100 km
"query": { }
(我使用了 db.command,因为从我读到的 $geoNear 在使用 find() 时不可用)
到目前为止,我所做的一切都没有成功,所以我现在的问题是:
- 我的猫鼬模型应该是什么样子?
- 如何在我的数据库中存储用户及其位置
任何帮助将不胜感激!
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query geospatial