यह हासिल करने में आपकी मदद करने वाली सुविधा अभी उपलब्ध नहीं है। हालांकि, एक नया एग्रीगेशन ऑपरेटर होगा जो किसी दिए गए इंडेक्स के लिए ऐरे एलिमेंट देता है। नई अभिव्यक्ति को $arrayElemAt
. कहा जाता है
नए एकत्रीकरण ऑपरेटर का उपयोग करें जो MongoDB संस्करणों के लिए उपलब्ध है 3.2.X
और अधिक, यह किसी दिए गए अनुक्रमणिका के लिए एक सरणी तत्व देता है। नए एक्सप्रेशन को $arrayElemAt
. यह दो तर्क, एक सरणी और एक अनुक्रमणिका लेता है और सरणी में दिए गए अनुक्रमणिका पर तत्व देता है। नकारात्मक सूचकांकों को सरणी के पीछे से अनुक्रमित के रूप में स्वीकार किया जाता है। यदि अनुक्रमणिका सीमा से बाहर है, तो यह अनुपलब्ध मान लौटाता है, जिसका अर्थ है कि फ़ील्ड आउटपुट में मौजूद नहीं होगा:
var pipeline = [
{ $match : {"geo" : {$ne: null}}},
{
$project: {
_id: "$id_str",
lat: { $arrayElemAt: ['$geo.coordinates', 0] },
lon: { $arrayElemAt: ['$geo.coordinates', 1] }
}
}
];
अभी के लिए एक समाधान के रूप में (यह मानते हुए कि निर्देशांक सरणी में किसी भी समय हमेशा दो तत्व होंगे), आप निम्न एकत्रीकरण पाइपलाइन को आज़मा सकते हैं जो $first
और $last
समूह संचायक संचालकों को के बाद तत्व प्राप्त करने के लिए $sort
:
var pipeline = [
{$match : {"geo" : {$ne: null}}},
{ "$unwind": "$geo.coordinates" },
{ "$sort": {"geo.coordinates": 1} } ,
{
"$group": {
"_id": "$_id",
"lat": { "$first": "$geo.coordinates" },
"lon": { "$last": "$geo.coordinates" }
}
}
];