How does one represent MongoDB GeoJSON fields in a Mongoose Schema?

geojson, geospatial, mongodb, mongoose, schema

Solution

You must used Mixed to represent arrays of arrays. There is an open ticket to support this in the future.

@nevi_me is correct, you must declare the `type` property as he described.

Here's a gist: https://gist.github.com/aheckmann/5241574

See the mongoose tests here for more ideas: https://github.com/LearnBoost/mongoose/blob/master/test/model.querying.test.js#L1931

Problem

MongoDB 2.4 allows the use of GeoJSON objects and a slew of neat functions and indexes that I'd like to use. It expects GeoJSON objects to be stored in the format like: ``` loc: { type: 'Polygon', coordinates: [[[-180.0, 10.0], [20.0, 90.0], [180.0, -5.0], [-30.0, -90.0]]] } ``` So in Mongoose one would think the schema would be defined like: ``` loc: { type: 'string', coordinates: [[['number']]] } ``` But this present two problems: having a field called "type" screws up Mongoose's schema parsing because it allows defining fields in the form field: { type: , index: } etc. Mongoose does not like nested arrays. One way to overcome this is to simply use `mongoose.Schema.Types.Mixed`, however I feel that there has got to be a better way!

Original source