0

我正在试验 mongodb 和地理空间查询。我做了以下收藏:

shape> db.shape.find()
[
  {
    _id: ObjectId("61ab50d2056b5357b5e23e56"),
    name: 'Point1',
    structure: { type: 'Point', coordinates: [ 2.5, 2.5 ] }
  },
  {
    _id: ObjectId("61ab5337056b5357b5e23e57"),
    name: 'Point2',
    structure: { type: 'Point', coordinates: [ 5, 5 ] }
  },
  {
    _id: ObjectId("61ab533e056b5357b5e23e58"),
    name: 'Point3',
    structure: { type: 'Point', coordinates: [ 9, 9 ] }
  },
  {
    _id: ObjectId("61ab5b4d056b5357b5e23e64"),
    name: 'square',
    structure: {
      type: 'Polygon',
      coordinates: [ [ [ 0, 0 ], [ 0, 5 ], [ 5, 5 ], [ 5, 0 ], [ 0, 0 ] ] ]
    }
  }
]

然后我尝试了以下方法:

var square = db.shape.find({name :"square"});
db.shape.find({structure : { $geoWithin : { $geometry : square.structure}}});

我得到这个错误:

MongoServerError: unknown geo specifier: $geometry: null

为什么 $geometry 为空?

提前致谢

4

1 回答 1

1

在处理查询时,square.structure被替换为null因为您试图以错误的方式访问该变量。

在该square变量中,您将存储find()方法返回的结果。

find()方法返回一个游标,我们需要使用游标方法(如forEach)来访问包含的文档。asfindOne()返回一个可以直接访问的文档。

这样你就可以:

  1. 使用findOne()代替find()
  2. 使用游标方法,如square.forEach(function(mydoc){<iterate through cursor here>})

我已经复制了您的数据并测试了您的查询,findOne()并且效果很好。

于 2022-02-07T07:37:23.753 回答