我在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" })
有谁知道我做错了什么?
答案 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" });