2017-03-29 15 views
0

我試圖找到正確的方式來查詢給定的場景。Mongoose地理空間查詢查找包含給定點的所有用戶範圍

我有一堆用戶位置latlng和用戶定義的半徑。 而我有一個感興趣的地點latlng。 現在我想找到所有用戶的球體,包括感興趣的點。

我爲您提供如何查詢,但這顯然是錯誤的。

模式:

const POISchema = new mongoose.Schema({ 
            poi_uuid: {type: String, required: true}, 
            category_uuid: {type: Number, required: true}, 
            category: {type: String, ref: 'SubCategory'}, 
            activity: {type: String, required: false}, 
            infos: {type: String, required: false}, 
            location: { 
               coordinates: {type: [Number], index: '2d', required: false, default: []} 
               } 
              }, {usePushEach: true}); 


    const UserSchema = new mongoose.Schema({ 
            user_uuid: {type: String, required: true}, 
            helper_radius: {type: Number, required: true}, 
            address: { 
               coordinates: {type: [Number], index: '2d', required: false, default: []} 
              } 
              }, {usePushEach: true}); 

查詢:

User.find() 
        .and([ 
         { 
          latlng: { 
           $near: [parseFloat(obj.coordinates[0]), parseFloat(obj.coordinates[1])], 
           $maxDistance: parseFloat(20/111.2) 
          } 
         }, 
         {'_id': {'$ne': obj._id}}, 
         {'categories': obj.category_uuid} 
        ]) 
        .exec(function (err, users) { 
         if (err) { 
          console.log(err); 
          return res.send(500, JSON.stringify(err)) 
         } 
         return res.send({users: users}) 
        }) 

我知道,我可能必須使用$ geoWithin或$ geoIntersects。但我真的不知道如何和我閱讀像我能找到的一切。我甚至都沒有找到如何使用貓鼬爲具有定義半徑的2D球體聲明模式字段。也許有人可以指引我正確的方向或有一些有用的鏈接。

回答

0

我認爲你在尋找這樣的事情:

var poi; // this is the point of interest for which I want to find the users nearby  
User.aggregate(
    [ 
     { "$geoNear": { 
      "near": poi.location.coordinates, 
      "distanceField": "distance" 
     }}, 
     { "$redact": { 
      "$cond": { 
       "if": { "$lt": [ "$distance", "$helper_radius" ] }, 
       "then": "$$KEEP", 
       "else": "$$PRUNE" 
      } 
     }} 
    ], 
    function(err,results) { 
     // read the response 
    } 
); 
+0

的「maxdistance」由用戶定義,可以是爲他們每個人的不同。 – Sprotte

+0

@Sprotte能否請您包括用戶的模式和興趣點? – enrichz

+0

我編輯帖子感謝你的幫助 – Sprotte

相關問題