【问题标题】:MongoDB Malformed Geometry with geojson带有geojson的MongoDB畸形几何
【发布时间】:2015-06-15 14:15:21
【问题描述】:

使用 MongoDB v2.6.5

当我尝试将 geojson 文档保存到数据库中时,我收到以下错误:

name: 'MongoError',
  code: 16755,
  err: 'insertDocument :: caused by :: 16755 Can\'t extract geo keys from object, malformed geometry?: { _id: ObjectId(\'55271b90d075728028d4c9e1\'), ..., location: [ { _id: ObjectId(\'55271b90d075728028d4c9e3\'), loc: { type: "Point", coordinates: [ -105.01621, 39.57422 ] } } ] } ], status: [ "lead" ], created: new Date(1428626320406), lastName: "Doe", firstName: "John", __v: 0 }' }

我正在尝试使用 2dsphere 索引将 Point 插入到表中,所有这些都通过 MongooseJS 进行管理,如下所示。

var GeoAddressSchema = new Schema({
    // Only holds points.
    loc: {
        type: { type: String },
        coordinates: []
    }
});


var Lead = new Schema({
    // Other fields  ...
    location: [GeoAddressSchema],
    // ...
});

LeadAddressSchema.index({ location: '2dsphere' });

正在保存的geojson:

{ type: "Point", coordinates: [ -111.855211, 33.58513 ] }

geojson 根据:http://geojsonlint.com/ 有效,如果我将字段括在引号中,但我不需要这样做(对于 Mongo afaik 也不能)。

有人知道为什么会失败吗?它看起来是正确的。

参考链接

MongoDB GeoJSON:http://docs.mongodb.org/manual/reference/geojson/

MongoDB 2dSphere:http://docs.mongodb.org/manual/core/2dsphere/

【问题讨论】:

  • GeoJSON 指出错误消息并在您的问题中发布,这对我来说都很好。您使用的是哪个版本的 MongoDB?你能发布一个对你来说失败的最小例子吗?

标签: javascript node.js mongodb mongoose geojson


【解决方案1】:

第一个观察:你不需要在 location 结构中引入loc 路径。

此外,您甚至不需要为 location 架构中的 location 字段定义单独的架构。

试试这个:

var Lead = new Schema({
  // Other fields  ...
  location: {
    type: {
      type: 'String',
      default: 'Point'  // and optionally skip including `type: String` everywhere
    },
    coordinates: {
      type: [Number]
    }
  },
  // More fields ...
});

LeadAddressSchema.index({ location: '2dsphere' });

我遇到的另一个问题是,在找出和测试解决方案时,2dsphere 索引会变得混乱。因此,在对架构进行结构更改后尝试删除索引,甚至更好地收集集合。

> db.lead.drop();  // on the mongo console`

【讨论】:

  • 这太完美了。谢谢你。它也简化了我的很多代码。我真的很感激!
  • 顺便说一句 - 我也遇到了你提到的索引问题。我不得不放下然后阅读它。这就是让我意识到我最初的实现是错误的。它在本地工作。然后我把它推到 CI 环境中,发现它坏了。
  • 能否解释一下如何删除索引以及如何替换索引?
  • 你救了我的命,经过 2 天的尝试,我读到你的回答,放弃收藏是件好事,这是我的问题。谢谢你
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多