$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" }
}}
])
आपको शायद ध्यान देना चाहिए कि उप-दस्तावेज़ के भीतर वस्तुओं का उपयोग करना हमेशा एक इष्टतम समाधान नहीं होता है और आम तौर पर विभिन्न कार्यों के लिए उपयुक्त नहीं होता है। उदाहरण के लिए, यदि सरणी में आपके डेटा में संभावित रूप से "एकाधिक" स्थान हैं जो क्वेरी किए गए बिंदु के "निकट" होंगे, तो केवल एकवचन "निकटतम" बिंदु का इस तरह मिलान किया जा सकेगा।
इसलिए जब तक आप ऐसा कर सकते हैं, यह विचार करना सबसे अच्छा है कि आप इसका उपयोग कैसे कर रहे हैं और आपके द्वारा अपेक्षित परिणाम। ज्यादातर मामलों में, स्थान डेटा को उप-दस्तावेज़ सरणी के बजाय अपने स्वयं के दस्तावेज़ में सूचीबद्ध किया जाना चाहिए जैसा कि यहाँ किया गया है।