mongodb和geoWithin

时间:2015-06-25 17:10:13

标签: node.js mongodb

下面的搜索工作没有问题,但是当我更改为在多边形内寻找位置的搜索类型时,它会丢失,是否需要在搜索中进行一些调整? 我做了一些尝试将在下面发布

db.geom.insert({"polygons":
                  {"type":"Polygon",
                     coordinates:
                      [[[ 17.60083012593064, 78.18557739257812], 
                        [ 17.16834652544664, 78.19381713867188], 
                        [ 17.17490690610013, 78.739013671875], 
                        [ 17.613919673106714, 78.73489379882812],
                        [ 17.60083012593064, 78.18557739257812]
                      ]]
                  }
             }); 

我在mongo中使用的测试。

db.geom.find({polygons:
    {      
    $geoWithin: {
         $geometry: {
            "type" : "Point",
            coordinates: [ 17.3734, 78.4738  ]
         }
      }
   }
 });

道德是我有一个映射的家,想知道一个人何时进入那个房子,我每时每刻都将该人的位置发送到服务器。 每时每刻(5秒),它运行一个testInsideOfHouse.js并检查这个人是否已经进入房子,但是脚本在mongo中找不到任何东西...有一些东西我可以用nodejs做更“轻松”的方式和mongo ......还是我走对了路?

 Position.find(
        { geo :
                     { $geoWithin : { $box :
                                      [ [ box[0] , box[1] ] ,
                                        [ box[2] , box[3] ] ] } }

    }, function(err, response) {
        if (err) return err;

        console.log(response)

    });    

我发现另一种方法是使用盒子,但它比使用多边形更好吗? 我不太明白它是如何工作的......

我发现在mongodb中不存在子查询,因为我不会让一个人拥有一个有职位的人员名单,无论他们是在房子内还是检查他们在房屋列表中并且返回谁的房子是这个人。 在mysql或sql中将是另一个查询中的查询

感谢您的关注

1 个答案:

答案 0 :(得分:1)

你仍然可以使用“Point”类型作为人的坐标,但是使用的右边操作符是“$ geoIntersects”,而不是“$ geoWithin”(因为多边形不能在一个点内)

db.geom.find({polygons:
    {      
    $geoIntersects: {
         $geometry: {
            "type" : "Point",
            coordinates: [ 17.3734, 78.4738  ]
         }
      }
   }
 });"