在子域中创建多边形的2dphere索引

时间:2018-02-25 18:37:08

标签: mongodb mongodb-indexes

我在MongoDB 3.6中创建2dsphere索引时遇到问题。我在GeoJSON中有一系列多边形。其中一个多边形是以下示例(简化为仅4个点):

module.exports = (sequelize, DataTypes) => { const Orders = sequelize.define('Orders', { userId: DataTypes.INTEGER, }, {}); Orders.associate = function (models) { Orders.belongsTo(models.Users); Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' }); }; return Orders; };

当尝试按照official website example中的说明创建2dsphere索引时,我需要使用子字段&feature; geometry.coordinates'。但是,当我尝试使用GeoJSON { "_id" : ObjectId("5a92b5ad370dfa460e07f2ab"), "type" : "FeatureCollection", "crs" : { "type" : "name", "properties" : { "name" : "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features" : [ { "type" : "Feature", "properties" : { "ManCatID" : NumberInt(3075), "ManCatName" : "Field1" }, "geometry" : { "type" : "Polygon", "coordinates" : [ [ [ -2.590805067250554, 52.57471588485983 ], [ -2.594339050478125, 52.57415879313657 ], [ -2.590791776038, 52.573727037479124 ], [ -2.590805067250554, 52.57471588485983 ] ] ] } } ] } 创建时,它失败了。

如果我使用db.CaseStudies.createIndex({ features.geometry: "2dsphere" });,我没有收到任何错误。但是,当我进行查询时,我总是获得' null'结果。我使用的查询是:

db.CaseStudies.createIndex({ geometry: "2dsphere" })

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此查询吗?:

db.CaseStudies.findOne({
  "features.geometry": {
     $geoIntersects: { $geometry: { type: "Point", coordinates: [ -2.592, 52.574 ] } }
  }
});

您匹配的字段应为features.geometry,而不是geometry

关于创建索引时失败,您可以尝试使用features.geometry附近的引号:

db.CaseStudies.createIndex({ "features.geometry": "2dsphere" });