यहां उपयोग करने के लिए सही क्वेरी एकत्रीकरण ढांचे
का उपयोग करती है जिसमें $geoNear
है
इसमें सहायता के लिए पाइपलाइन चरण। यह एकमात्र ऐसा स्थान है जहां आप कई कुंजियों द्वारा "क्रमबद्ध" कर सकते हैं, दुर्भाग्य से "भू-स्थानिक" $nearSphere
$text
. जैसे "दूरी" के लिए "मेटा" प्रक्षेपण नहीं है एक "स्कोर" है।
साथ ही geoNear
आप जिस डेटाबेस कमांड का उपयोग कर रहे हैं उसका उपयोग "कर्सर" .sort()
. के साथ भी नहीं किया जा सकता है उस तरह से भी।
db.paging.aggregate([
{ "$geoNear": {
"near": [106.606033,29.575897 ],
"spherical": true,
"distanceField": "distance",
"distanceMuliplier": 6371,
"maxDistance": 1/6371
}},
{ "$sort": { "distance": 1, "createdate": -1 } },
{ "$skip": ( 2-1 ) * 2 },
{ "$limit": 5 }
])
यह आप जो करने की कोशिश कर रहे हैं उसके बराबर है।
एकत्रीकरण ढांचे के साथ आप "पाइपलाइन ऑपरेटर"
का उपयोग करते हैं $sort
. जैसी चीज़ें करने के लिए "कर्सर संशोधक" के बजाय , $skip
और $limit
. साथ ही इन्हें जरूरी एक तार्किक क्रम में हो, जबकि कर्सर संशोधक आमतौर पर इसे काम करते हैं।
यह "यूनिक्स पाइप" की तरह एक "पाइपलाइन" है। |
साथ ही, "maxDistance" और "distanceMuliplier" से सावधान रहें। चूंकि आपके को-ऑर्डिनेट्स "लीगेसी को-ऑर्डिनेट पेयर" में हैं, न कि GeoJSON
में प्रारूप, फिर दूरियों को "रेडियन" में मापा जाता है। यदि आपके पास GeoJSON संग्रहीत स्थान डेटा है तो परिणाम "मीटर" में वापस आ जाता है।