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

MongoDBAggregateを使用して2つのアレイ間の内積を計算します

    両方の配列の長さが同じであると仮定すると、以下の集計を使用できます。

    db.collection.aggregate([
        {
            $project: {
                dotProduct: {
                    $reduce: {
                        input: { $range: [ 0, { $size: "$source" }] },
                        initialValue: 0,
                        in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
                    }
                }
            }
        }    
    ])
    

    $ range この場合、4つの要素の配列を生成するために使用されます(0,1,2,3) これらは、 $arrayElemAt のインデックスとして使用されます。 オペレーター。 $ reduce スカラー値を返す特定のインデックスのすべての積を単純に合計します。 $reduceで使用される2つの特別な変数があります :$$value $$thisが合計を表す $rangeによって生成されたインデックスを表します




    1. エラー:子プロセスが失敗し、エラー番号51MongoDBで終了しました

    2. MongoDBを使用したMapReduceは、非常に低速です(同等のデータベースの場合、MySQLでは30時間対20分)

    3. マングースでジオロケーションを作成して検索

    4. Mongo:キーによるクエリを1レベル深く