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

geoNear द्वारा उप दस्तावेज़ प्राप्त करता है - MongoDB

$geoNear के तहत विकल्प है includeLocs इस प्रकार:

Store.aggregate([
    { "$geoNear": {
        "near": [ -70.64341379999999, -33.4268697 ],
        "distanceField": "distance", 
        "maxDistance": 0.0900899926955034,
        "includeLocs": "location"
    }}
])

आउटपुट का मिलान "स्थान" से आउटपुट फ़ील्ड में "दूरी" से होता है:

{
    "_id" : ObjectId("5507b18d1c3bdce0535aecd0"),
    "name" : "store1",
    "branchoffices" : [
            {
                    "name" : "bo1",
                    "location" : [
                            -70.64341379999999,
                            -33.4268697
                    ]
            },
            {
                    "name" : "bo2",
                    "location" : [
                            80.4,
                            43.3
                    ]
            }
    ],
    "distance" : 0,
    "location" : [
            -70.64341379999999,
            -33.4268697
    ]
}

यदि आप उस सरणी में विशिष्ट उप-दस्तावेज़ चाहते हैं जिसका उपयोग मैच में पूर्ण विवरण में किया गया था तो आप $redact :

Store.aggregate([
    { "$geoNear": {
        "near": [ -70.64341379999999, -33.4268697 ],
        "distanceField": "distance", 
        "maxDistance": 0.0900899926955034,
        "includeLocs": "location"
    }},
    { "$redact": {
        "$cond": [
            { "$eq": [ "$location", "$$ROOT.location" ] },
            "$$DESCEND",
            "$$PRUNE"
        ]
    }}
])

या MongoDB 2.6 से पहले के संस्करणों में इस तरह:

Store.aggregate([
    { "$geoNear": {
        "near": [ -70.64341379999999, -33.4268697 ],
        "distanceField": "distance", 
        "maxDistance": 0.0900899926955034,
        "includeLocs": "location"
    }},
    { "$unwind": "$branchoffices" },
    { "$project": {
        "name": 1,
        "branchoffices": 1,
        "matched": {
            "$eq": [ "$location", "$branchoffices.location" ]
        }
    }},
    { "$match": { "matched": 1 } },
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "branchoffices": { "$push": "$branchoffices" },
        "distance": { "$first" "$distance" }
    }}
])

आपको शायद ध्यान देना चाहिए कि उप-दस्तावेज़ के भीतर वस्तुओं का उपयोग करना हमेशा एक इष्टतम समाधान नहीं होता है और आम तौर पर विभिन्न कार्यों के लिए उपयुक्त नहीं होता है। उदाहरण के लिए, यदि सरणी में आपके डेटा में संभावित रूप से "एकाधिक" स्थान हैं जो क्वेरी किए गए बिंदु के "निकट" होंगे, तो केवल एकवचन "निकटतम" बिंदु का इस तरह मिलान किया जा सकेगा।

इसलिए जब तक आप ऐसा कर सकते हैं, यह विचार करना सबसे अच्छा है कि आप इसका उपयोग कैसे कर रहे हैं और आपके द्वारा अपेक्षित परिणाम। ज्यादातर मामलों में, स्थान डेटा को उप-दस्तावेज़ सरणी के बजाय अपने स्वयं के दस्तावेज़ में सूचीबद्ध किया जाना चाहिए जैसा कि यहाँ किया गया है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो में परमाणु संचालन की तरह जांच और सेटिंग करने का कोई तरीका?

  2. OS X El Capitan (v10.11.1) पर Mongodb ड्राइवर स्थापित करने के लिए pecl का उपयोग करना

  3. उल्का संग्रह पर प्रश्नों के आधार पर समूह

  4. मोंगोडब ऑब्जेक्ट को जावास्क्रिप्ट ऑब्जेक्ट में बदलें

  5. Mongoose/MongoDB में पासवर्ड फ़ील्ड की सुरक्षा कैसे करें ताकि जब मैं संग्रहों को पॉप्युलेट करता हूं तो यह किसी क्वेरी में वापस नहीं आएगा?