sql >> データベース >  >> NoSQL >> MongoDB

MongoDBプロジェクションアグリゲーションの特定の配列アイテムにどのようにアクセスしますか?

    これを実現するのに役立つ機能はまだ利用できません。ただし、特定のインデックスの配列要素を指定する新しい集計演算子があります。新しい式は$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" }
            }
        }
    ];
    


    1. mongodbは、mongooseを使用して機能しない配列からオブジェクトをプルします

    2. mongodb-フィールドが多くの値の1つであるかどうかを確認します

    3. Mongodb phpは新しいドキュメントのIDを取得しますか?

    4. MongoDBで監視する重要事項