Json MongoDB中的Interspot a FeatureCollection

Json MongoDB中的Interspot a FeatureCollection,json,mongodb,geojson,Json,Mongodb,Geojson,我有一个GeoJson,里面填充了来自奥地利的州,我想做一个查询,将某些州截取我的多边形作为输出 这是我的疑问: db.GeoAustria.find( { 'features.geometry':{ $geoIntersects:{ $geometry:{ type: "Polygon", coordinates: [ [ [ 16.2168

我有一个GeoJson,里面填充了来自奥地利的州,我想做一个查询,将某些州截取我的多边形作为输出

这是我的疑问:

db.GeoAustria.find(
  {
  'features.geometry':{
    $geoIntersects:{
      $geometry:{
        type: "Polygon",
        coordinates:  [
          [
            [
              16.21685028076172,
              48.007381433478855
            ],
            [
              16.24225616455078,
              47.98716432210271
            ],
            [
              16.256675720214844,
              48.00669234420252
            ],
            [
              16.21685028076172,
              48.007381433478855
            ]
          ]
        ]
        }
      }
    }
  }
)
但它给了我所有的特征,包括那些不重叠多边形的特征。。。
我在这个查询中的错误在哪里?

这里是基本数组匹配错误。输入集是单个文档,在单个
FeatureCollection
对象的数组中有95个多边形。当您对这些内容执行find()时,任何作为交集的单独地理位置都将导致整个文档作为匹配项返回。这与:

> db.foo.insert({x:["A","B","C"]})
WriteResult({ "nInserted" : 1 })
> db.foo.find({x:"A"});
{ "_id" : ObjectId("5fb1845b08c09fb8dfe8d1c1"), "x" : [ "A", "B", "C" ] }
返回整个文档,而不仅仅是元素“A”

假设您的集合中可能有多个大文档。此管道生成巴登的单一目标几何体(我在您的输入集上对其进行了测试):

除此之外,我可能建议将
FeatureCollection
分解为可索引(
FeatureCollection
在MongoDB中不可索引)和更易于处理的内容。例如,针对单个文档/多个多边形设计运行的这个小脚本将在95个文档中使用额外信息进行转换:

db.geo2.drop();

mainDoc = db.geo1.findOne();  // the one Austria doc
mainDoc['features'].forEach(function(oneFeature) {
    var qq = {
            country: "Austria",
            crs: mainDoc['crs'],
            properties: oneFeature['properties'],
            geometry: oneFeature['geometry']
        };
        db.geo2.insert(qq);
    });


db.geo2.aggregate([
{$match: {"geometry": {$geoIntersects: {$geometry: targ}} }}
  ]);
// yields same single doc output (Baden) 

这使得匹配和过滤变得容易。有关
FeatureCollection
GeometryCollection
的更多信息,请参见此处的基本数组匹配。输入集是单个文档,在单个
FeatureCollection
对象的数组中有95个多边形。当您对这些内容执行find()时,任何作为交集的单独地理位置都将导致整个文档作为匹配项返回。这与:

> db.foo.insert({x:["A","B","C"]})
WriteResult({ "nInserted" : 1 })
> db.foo.find({x:"A"});
{ "_id" : ObjectId("5fb1845b08c09fb8dfe8d1c1"), "x" : [ "A", "B", "C" ] }
返回整个文档,而不仅仅是元素“A”

假设您的集合中可能有多个大文档。此管道生成巴登的单一目标几何体(我在您的输入集上对其进行了测试):

除此之外,我可能建议将
FeatureCollection
分解为可索引(
FeatureCollection
在MongoDB中不可索引)和更易于处理的内容。例如,针对单个文档/多个多边形设计运行的这个小脚本将在95个文档中使用额外信息进行转换:

db.geo2.drop();

mainDoc = db.geo1.findOne();  // the one Austria doc
mainDoc['features'].forEach(function(oneFeature) {
    var qq = {
            country: "Austria",
            crs: mainDoc['crs'],
            properties: oneFeature['properties'],
            geometry: oneFeature['geometry']
        };
        db.geo2.insert(qq);
    });


db.geo2.aggregate([
{$match: {"geometry": {$geoIntersects: {$geometry: targ}} }}
  ]);
// yields same single doc output (Baden) 

这使得匹配和过滤变得容易。有关
FeatureCollection
GeometryCollection
的更多信息,请参见。

GeoAustria集合中是否有多个文档,每个文档都有一个多边形,或者其中是否也有多个多边形?你能提供一个你认为不应该与你的查询多边形相交的文档的例子吗?你说它“给我所有的特征…”你是在一个文档中使用多个几何多边形的
FeatureCollection
?是的,有多个多边形。这就是集合:在本例中,它应该只与“Baden”相交OK——MongoDB中匹配语义的标准错误解释`功能是
GeoAustria
集合之一,其中有多个文档,每个文档都有一个多边形,还是也有多个多边形?你能提供一个你认为不应该与你的查询多边形相交的文档的例子吗?你说它“给我所有的特征…”你是在一个文档中使用多个几何多边形的
FeatureCollection
?是的,有多个多边形。这就是集合:在本例中,它应该只与“Baden”相交OK——MongoDB中匹配语义的标准错误解释`功能我也尝试过放松,但显然使用不当。我使用了您的脚本,现在我的查询完全按照我的要求工作。谢谢你的努力和帮助@P01NT1非常好。不要羞于向上箭头投票。我会的,但我是一个新用户,我的声誉还不够高,现在无法投票!我也试过放松,但显然用错了。我使用了您的脚本,现在我的查询完全按照我的要求工作。谢谢你的努力和帮助@P01NT1非常好。不要羞于向上箭头投票。我会的,但我是一个新用户,我的声誉还不够高,现在无法投票!