2016-06-01 26 views
2

Ich habe eine Frage über die Verwendung von $ near vs geonear in zurückkehrenden Abstand von gespeicherten Punkten in der Datenbank vom Benutzer eingegeben Punkt von Interesse, wenn mehr als ein 2Dsphere Index in dem Schema vorhanden ist Punkte.Geonear und mehr als zwei 2Dsphere Indizes

Der Anwendungsfall ist unten.

In meinem Schema habe ich eine Quelle und einen Zielort wie unten. Die Abfrage mit Intracity.find funktioniert ordnungsgemäß und gibt mir sortierte Einträge von einem eingegebenen Punkt von Interesse.

var baseShippingSchema = new mongoose.Schema({ 
startDate  : Date, 
endDate  : Date, 
locSource: { 
    type: [Number],   
    index: '2dsphere'  
    }, 
locDest: { 
    type: [Number],  
    index: '2dsphere'  
    }  
}); 

var search_begin = moment(request.body.startDate0, "DD-MM-YYYY").toDate(); 
var search_end = moment(request.body.endDate1, "DD-MM-YYYY").toDate(); 
var radius = 7000; 

Intracity.find({ 
     locSource: { 
       $near:{$geometry: {type: "Point", 
         coordinates: [request.body.lng0,request.body.lat0]}, 
       $minDistance: 0, 
       $maxDistance: radius                             
     } 
}).where('startDate').gte(search_begin) 
    .where('endDate').lte(search_end) 
    .limit(limit).exec(function(err, results) 
{ 
    response.render('test.html', {results : results, error: error}); 
}  

Allerdings mag ich auch den „Abstand“ der gespeicherten Punkte von dem Punkt von Interesse zurückzukehren, die nach meinem Wissen und Erkenntnissen, nicht möglich ist, mit $ in der Nähe von aber sind möglich mit geonear api.

Allerdings sagt die documentation von Geonear Folgendes.

geoNear benötigt einen Geodatenindex. Der Befehl "geoNear" erfordert jedoch, dass eine Auflistung höchstens einen 2d-Index und/oder nur eine 2dsphere aufweist.

Da in meinem Schema Ich habe zwei 2dspehere Indizes die folgende geonear api schlägt mit dem Fehler „mehr als ein 2D-Index, nicht sicher, welche geoNear auf laufen“

var point = { name: 'locSource', type : "Point", 
      coordinates : [request.body.lng0 , request.body.lat0] }; 

Intracity.geoNear(point, { limit: 10, spherical: true, maxDistance:radius, startDate:{ $gte: search_begin}, endDate:{ $lte:search_end}}, function(err, results, stats) { 
    if (err){return done(err);} 
    response.render('test.html', {results : results, error: error}); 
     }); 

Also meine Frage ist wie kann ich auch die Entfernung für jeden dieser gespeicherten Punkte vom eingegebenen Punkt von Interesse unter Verwendung des oben beschriebenen Schemas erhalten.

Jede Hilfe wäre wirklich toll, da meine Internetsuche nirgendwohin geht.

Danke Mrunal

Antwort

0

Wie Sie den mongodb docs Zustand, dass

Der geoNear Befehl und die $ geoNear Pipeline-Stufe festgestellt, erfordern, dass eine Sammlung ein 2dsphere Index und/oder nur eine höchstens haben 2d Index

Auf der anderen Seite Entfernungen innerhalb mongo Berechnung ist nur möglich mit der Aggregation Rahmen, da es eine spezialisierte Projektion ist. Wenn Sie nicht Option nehmen wollen

  1. relationalen DB-Ansatz: eine separate Distanztabelle zwischen allen Artikeln

dann andere Option ist zu

Aufrechterhaltung
  1. Document Store Approach: Berechnen Sie Entfernungen in Ihrem Server JS-Code. Sie müssten Speichergrenzen durch Paginieren von Ergebnissen abdecken.
Verwandte Themen