MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zapytaj i zsumuj wszystko z mangustą

Możesz użyć potoku agregacji aby dodać pola obliczeniowe do wyniku. Poniżej znajduje się kilka przykładów użycia mongo powłoki, ale składnia w pomocniku Aggregate() jest podobny.

Na przykład, aby obliczyć sumy (na dokument użytkownika), możesz użyć $add wyrażenie w $project scena :

db.user.aggregate(
    // Limit to relevant documents and potentially take advantage of an index
    { $match: {
        user_id: "foo"
    }},

    { $project: {
        user_id: 1,
        total: { $add: ["$user_totaldocs", "$user_totalthings"] }
    }}
)

Aby obliczyć sumy w wielu dokumentach, musisz użyć $group scena z $sum akumulator , na przykład:

db.user.aggregate(
    { $group: {
        _id: null,
        total:       { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
        totaldocs:   { $sum: "$user_totaldocs" },
        totalthings: { $sum: "$user_totalthings" }
    }}
)

Możesz potrzebować tylko jednego total pole; Dodałem w totaldocs i totalthings jako przykłady obliczania wielu pól.

Grupa _id z null połączy wartości ze wszystkich dokumentów przekazanych do $group etap, ale możesz tu również użyć innych kryteriów (takich jak grupowanie według user_id ).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy klauzula $in MongoDB gwarantuje kolejność?

  2. FindAll w MongoDB .NET Driver 2.0

  3. Mongoose, posortuj zapytanie według wypełnionego pola

  4. mongodb sprawdź, czy punkt jest w wieloboku

  5. Jak załadować dane początkowe w MongoDB?