sql >> Databáze >  >> NoSQL >> MongoDB

Vypočítejte bodový produkt mezi dvěma poli pomocí agregátu MongoDB

Za předpokladu, že obě pole mají stejnou délku, můžete použít níže agregaci:

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

$range se používá ke generování pole 4 prvků v tomto případě (0,1,2,3) a ty se používají jako indexy pro $arrayElemAt operátor. $reduce jednoduše sečte všechny produkty pro konkrétní indexy a vrátí skalární hodnotu. V $reduce jsou použity dvě speciální proměnné :$$value představuje součet, zatímco $$this představuje index generovaný $range




  1. Apache Phoenix pro CDH

  2. Použití _id generovaných MongoDB jako tajných dat (např. tokenů OAuth)

  3. jak spravovat pole _id při použití POCO s ovladačem mongodb c#

  4. V MongoDB se sloučí 2 dokumenty