Jak zsumować wartości pól w kolekcjach w mangusta

0

Pytanie

const PostSchema = new mongoose.Schema({
  title: {
    type: String,
  },
  text: {
    type: String,
    required: true,
  }
  postedBy: {
    type: mongoose.Schema.ObjectId,
    ref: "User",
  }
  likes: [{
    type: mongoose.Schema.ObjectId,
    ref: "User",
  }, ],
  likeLength: {
    type: Number,
    default: 0
  }
});


let totalLikes = Post.aggregate([{
    $match: {
      postedBy: req.profile._id,
    },
  },
  {
    $group: {
      _id: "$postedBy",
      total_count: {
        $sum: "$likeLength"
      }
    }
  },
])

Chciałem podsumować wartości długości prawdopodobieństwa we wszystkich zbiorach rekordów, które zostały odfiltrowane przez pole postedBy, i uzyskać суммированный wynik, jakiego typu liczby całkowitej. Próbowałem użyć funkcji totalLikes wyżej, ale nie mógł tego zrobić.

javascript mongodb mongoose node.js
2021-11-23 17:31:51
2
0

Może to pomoże

  • dodać wiersz req.profile._id do obiektu
  • grupowanie null wszystkie są z jednego i tego samego postedBy w ten sposób, wszystkie wysłane dokumenty znajdują się w grupie. (grupa null oznacza całą grupę kolekcji 1) (twoja grupa również była w porządku, ale jest to łatwiejsze)
  • wyczyść pole wyboru _id aby uzyskać w wyniku [{"total_count" : 20}] na przykład

*przed badaniem grupowego testu, jeśli $match pracy i dokumenty znalezione.

let totalLikes = Post.aggregate([{
    $match: {
      postedBy: mongoose.Types.ObjectId(req.profile._id),
    }
  },
  {
    $group: {
      _id: null,
      total_count: {
        $sum: "$likeLength"
      }
    }
  },
  {"$unset": ["_id"]}
])
2021-11-23 18:51:11

Dziękuję bardzo. Ja również zrobiłem to za pomocą tej funkcji $group: { _id: "$postedBy",sumLikes: {$suma: {$size: "$lubię" }}} Ale jak uzyskać te dane , to znaczy liczba całkowita , i wyślij to liczba klienta?
jdee

wnioski są zawsze zwracają tablice dokumentów (lub pustą tablicę, jeśli nic nie znaleziono). Im bliżej można podejść, tym to [{total_count : 20 }] jeśli chcesz, możesz usunąć _id z project lub unset
Takis _

Bardzo wam dziękuję, naprawdę bardzo mi przykro, że marnuję swój czas zmarnowany, ale myślę, że to nie mój problem. Używam react na kliencie, a kiedy dostaję te dane z serwera, spotykam się z tym {_pipeline: Tablica(3), opcje: {...}} więc jak mogę się skontaktować ze swoim numerem :). Jednak, prawdopodobnie będziesz musiał ustawić dla tego nowe pytanie z powodu formatu strony internetowej.
jdee

agregacji zwracają kursory, i mają wiele metod, z których jeden jest prosty toArray() i stamtąd dostaniesz je za pomocą js po. zobacz w dokumentacji мангусту
Takis _

właściwie używam ich, ale nie otrzymuję wyników 1) console.log(statystyki?._pipeline?.mapa((polecenie)=> ( ><p > {polecenie[1]} <p ></p>) i 2) statystyki._pipeline[1]</p>
jdee

jeśli masz problem z js, być może , zadaj nowe pytanie, ja w ogóle używam java/xml, ale wiele osób może pomóc
Takis _

Dzięki, sprawdzę to i zadać nowe pytanie, jeśli nie mógł tego zrobić . Jeszcze raz dziękuję
jdee
0

Rozwiązanie tego jest następujący. Z wynikiem[0] wynikiem jest obiekt z właściwością sumLikes.

aggregate([
      {
        $match: {postedBy: req.profile._id}
      },
      {
        $group: {
          _id: null,
          sumLikes: {
            $sum: "$likeLength",
          },
        },
      },
      { $unset: ["_id"] },
    ], function(err, result) {
      if(err){
        console.log(err)
      }else{
        res.json(result[0])
      }})

2021-11-23 18:35:38

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................