MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

परिवर्तनीय दूरी के साथ MongoDb निकट/geonear क्वेरी

आप इसे सामान्य क्वेरी के साथ करने में सक्षम नहीं होंगे क्योंकि आप गतिशील रूप से प्रति दस्तावेज़ दूरी निर्धारित नहीं कर सकते हैं। MongoDB 2.4 के रूप में आप इसे एकत्रीकरण ढांचे के साथ कर सकते हैं क्योंकि उन्होंने पाइपलाइनों की शुरुआत में जियोनियर ऑपरेटर को जोड़ा है।

पहला चरण जियोनियर होगा जो कि जियोनियर कमांड से काफी मिलता-जुलता है। परिणामस्वरूप हमें निर्दिष्ट बिंदु (10,10) से दस्तावेज़ तक की दूरी भी मिल जाएगी।

दूसरे चरण में हमें प्रोजेक्ट ऑपरेटर का उपयोग करके maxDistance फ़ील्ड और कंप्यूटेड जियोनियर डिस्टेंस के बीच अंतर का विज्ञापन करना होगा।

अंत में, हम उन दस्तावेज़ों का मिलान करते हैं जिनमें सकारात्मक डेल्टा ((अधिकतम - दूरी)> 0) होता है।

यहां एसिंक्रोनस जावा ड्राइवर का उपयोग करने वाली पाइपलाइन है के सहायक वर्ग।

package example;

import static com.allanbank.mongodb.builder.AggregationProjectFields.include;
import static com.allanbank.mongodb.builder.QueryBuilder.where;
import static com.allanbank.mongodb.builder.expression.Expressions.field;
import static com.allanbank.mongodb.builder.expression.Expressions.set;
import static com.allanbank.mongodb.builder.expression.Expressions.subtract;

import com.allanbank.mongodb.bson.element.ArrayElement;
import com.allanbank.mongodb.builder.Aggregate;
import com.allanbank.mongodb.builder.AggregationGeoNear;
import com.allanbank.mongodb.builder.GeoJson;

public class AggregateGeoNear {
    public static void main(String[] args) {
        Aggregate aggregate = Aggregate
                .builder()
                .geoNear(
                        AggregationGeoNear.builder()
                                .location(GeoJson.p(10, 10))
                                .distanceField("distance"))
                .project(
                        include("name", "location", "maximumDistance"),
                        set("delta",
                                subtract(field("maximumDistance"),
                                        field("distance"))))
                .match(where("delta").greaterThanOrEqualTo(0)).build();

        System.out
                .println(new ArrayElement("pipeline", aggregate.getPipeline()));
    }
}

और यहाँ पाइपलाइन बनाई गई है:

pipeline : [
  {
    '$geoNear' : {
      near : [
        10, 
        10
      ],
      distanceField : 'distance',
      spherical : false,
      uniqueDocs : true
    }
  }, 
  {
    '$project' : {
      name : 1,
      location : 1,
      maximumDistance : 1,
      delta : {
        '$subtract' : [
          '$maximumDistance', 
          '$distance'
        ]
      }
    }
  }, 
  {
    '$match' : {
      delta : { '$gte' : 0 }
    }
  }
]

एचटीएच - रोब।

पी.एस. ऊपर के निर्माता ड्राइवर के 1.2.0 संस्करण के पूर्व-रिलीज़ का उपयोग कर रहे हैं। जैसे ही मैं टाइप करता हूं कोड बिल्ड मैट्रिक्स के माध्यम से जा रहा है और शुक्रवार, 22 मार्च, 2013 तक जारी किया जाना चाहिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. बाइनरी और अन्य डेटा का उपयोग करके एक छवि पोस्ट करें

  2. V4 से पहले MongoDB के ACID के अनुरूप नहीं होने का वास्तव में क्या मतलब था?

  3. पाइमोंगो के साथ मोंगोडब को कैसे छाँटें?

  4. AWS के लिए MongoDB एटलस और MongoDB एटलस में क्या अंतर है?

  5. मैं mongodb के _id का उपयोग करके विशेष तिथि पर डाले गए मानों को पुनर्प्राप्त करना चाहता हूं