これを実現するのに役立つ機能はまだ利用できません。ただし、特定のインデックスの配列要素を指定する新しい集計演算子があります。新しい式は $arrayElemAt
と呼ばれます
MongoDBバージョン3.2.X
で使用できる新しい集計演算子を使用します それ以上の場合、これは指定されたインデックスの配列要素を返します。新しい式は、 $arrayElemAt
。配列とインデックスの2つの引数を取り、配列内の指定されたインデックスにある要素を返します。負のインデックスは、配列の後ろからのインデックスとして受け入れられます。インデックスが範囲外の場合、欠落している値を返します。つまり、フィールドは出力に存在しません。
var pipeline = [
{ $match : {"geo" : {$ne: null}}},
{
$project: {
_id: "$id_str",
lat: { $arrayElemAt: ['$geo.coordinates', 0] },
lon: { $arrayElemAt: ['$geo.coordinates', 1] }
}
}
];
今のところ回避策として(座標配列には常に2つの要素があると仮定して)、 $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" }
}
}
];