Node.js mongo检查点是否位于存储的多边形内

Node.js mongo检查点是否位于存储的多边形内,node.js,mongodb,mongoose,geospatial,Node.js,Mongodb,Mongoose,Geospatial,我有一个用户集合,其中每个用户都有一个点 用户模式 username: string, location: { type: { type: String, default: 'Point' }, coordinates: {type: [Number], default: [0,0] } }, 我还有一个位置集合,其中每个位置都是多边形 地点 name: {type: String, required: true}, area: { type: { type: String

我有一个用户集合,其中每个用户都有一个点

用户模式

username: string,
location: {
      type: { type: String, default: 'Point' },
  coordinates: {type: [Number], default: [0,0] }
},
我还有一个位置集合,其中每个位置都是多边形

地点

name: {type: String, required: true},
area: {
  type: { type: String, default: 'Polygon' },
  coordinates: {type: [], required: true }
}   
现在我说我已经选择了两个位置poygons[id1,id2]。我想找到该位置内的所有用户,即poygon id1和id2内的用户。 我该怎么办

我知道如果给定一个点,我可以找到像这样的多边形

db.locations.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}}
但是,如果给我多边形并希望找到其中的所有用户,该怎么办

编辑

我想出了一个多边形,我可以做到这一点

User.find({location: { $geoWithin: { $geometry: locations[0] }}});

如何处理多个多边形?

适用于有此问题的任何人。我简单地通过创建遍历所有多边形的多多边形来解决它

var loc_json = {type: 'MultiPolygon', coordinates: []};
var flat_loc = _.flatMap(all_loc, 'locations');
var locations = [];
_.forEach(flat_loc, function(loc) {
   locations.push(loc.area.coordinates);
});
loc_json.coordinates = locations;
User.find({location: { $geoWithin: { $geometry: loc_json }}});

对于任何有这个问题的人。我简单地通过创建遍历所有多边形的多多边形来解决它

var loc_json = {type: 'MultiPolygon', coordinates: []};
var flat_loc = _.flatMap(all_loc, 'locations');
var locations = [];
_.forEach(flat_loc, function(loc) {
   locations.push(loc.area.coordinates);
});
loc_json.coordinates = locations;
User.find({location: { $geoWithin: { $geometry: loc_json }}});