Podczas badania Mongoose dla Nodejs wpadłem w problem, aby uzyskać informacje, aby poznać ilość użytkownika w mojej kolekcji:

Moja kolekcja ma rekordy, każdy rekord ma użytkownika. Chcę znać ilość unikalnych (różnych) użytkowników.

Jak mogę to zrobić z mangustą?

EDYTUJ:

Baza danych rośnie dość szybko, jest tam, czy tak, aby uzyskać numer z DB, zamiast dostać wszystkie odrębne rekordy i licząc je?

7
askmike 17 wrzesień 2012, 03:30

5 odpowiedzi

Najlepsza odpowiedź

Oto alternatywna odpowiedź, ponieważ otrzymuję wyjątek, gdy próbuję podejść z czerwonych z Mongoose 3.1.2 (co wydaje się być błędem w mangusty do mnie, ponieważ podejście Reddest powinno być w porządku).

Możesz wywołać metodę distinct na modelu kolekcji, określając nazwę pola identyfikacyjnego identyfikacji użytkownika tej kolekcji:

Record.distinct('user_id').exec(function (err, user_ids) {
    console.log('The number of unique users is: %d', user_ids.length);
});

Lub jeśli chcesz mieszać distinct połączenie z znaleziska, należy dołączyć wywołanie zwrotne w połączeniu distinct (To działało dla mnie):

Record.find().distinct('user_id', function (err, user_ids) { ... });

AKTUALIZACJA

Jeśli po prostu chcesz liczyć bez uzyskania wartości, trzymać się count() włączenie w łańcuchu:

Record.distinct('user_id').count().exec(function (err, count) {
    console.log('The number of unique users is: %d', count);
});

Uwaga : Nie działa to w najnowszym kodzie mangusta (3.5.2).

15
JohnnyHK 20 grudzień 2012, 16:02

Agregacja będzie dla Ciebie działała. Coś w tym stylu:

Transaction.aggregate(
    { $match: { seller: user, status: 'completed'  } }, 
    { $group: { _id: '$customer', count: {$sum: 1} } }
).exec() 
12
Arend 31 marzec 2016, 07:19

Jeśli po prostu chcesz uzyskać liczbę zapylonych kolekcji, możesz użyć tego:

Record.find()
      .distinct('user_id')
      .count(function (err, count) {
          //The number of unique users is 'count'
      });
3
ScorpioCPH 27 marzec 2014, 03:23

Możesz wykonać wyraźne zapytanie.

var Record = db.model('Record', yourSchema);
Record.find().distinct('user').exec(callback);

Zapytania mangusta: http://mongoosejs.com/docs/queries.html

Wyraźne zapytanie MongoDB: http://www.mongodb.org/display/docs/aggregation#aggregation-distinct.

1
BadCanyon 17 wrzesień 2012, 00:14

Potrzebowałem tylko liczby odrębnych muzyków, ale niektóre z Powyższy kod nie działał dla mnie . Gdybym użył liczy się i razem razem, właśnie dostałem całkowitą liczbę.

To było moje rozwiązanie :

/**
 * Get number of distinct musicians
 */

myList.find()
    .distinct('musicianName')
    .exec(function (err, count) {
        console.log(count.length);
    });
0
Leopold Kristjansson 17 maj 2018, 12:10