Ako súčet hodnoty poľa v zbierok v mongoose

0

Otázka

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"
      }
    }
  },
])

Chcel som, aby súčet likeLength hodnoty vo všetkých Post zbierky filtrované postedBy oblasti a získať zhrnul výsledok, ktorý typ integer. Snažil som sa totalLikes funkcia vyššie, ale nemohol to urobiť.

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

Možno, že to môže pomôcť

  • vytvoriť reťazec req.profile._id na ObjectId
  • skupiny null všetky sú z rovnakej postedBy takže všetky dokument, ktorý prešiel sú v skupine. (skupine null znamená, že všetky zbierky 1) skupina (skupiny bolo ok aj, ale je to jednoduchšie)
  • nie je nastavené na _id ak chcete získať ako výsledok [{"total_count" : 20}] napríklad

*pred testovaním skupiny test, ak $match prác a dokumentov, ktoré sa nachádzajú.

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

Ďakujem . Tiež som robil to s touto funkciou $skupina: { _id: "$postedBy",sumLikes: {$suma: {$size: "$rád" }}} Ale ako dostať tento údajov , mám na mysli celé číslo , a poslať, že číslo klienta?
jdee

otázky vždy vráti polia dokumentov (alebo prázdne pole, pokiaľ nie je nič nájsť). Bližšie sa môžete dostať, je to [{total_count : 20 }] ak chcete, aby tento môžete odstrániť _id s project alebo unset
Takis _

Ďakujem a som naozaj ľúto strácaš čas, ale myslím si, že nie je môj problém. Používam reagovať na klienta a keď som si to údaje zo servera stretávam s týmto {_pipeline: Array(3), možností: {...}} tak, ako môžem dosiahnuť moje číslo :). Som však pravdepodobne musieť požiadať o novú otázku, že vzhľadom na webovej formát.
jdee

podkovára vrátiť kurzory, a majú mnoho metód, jeden jednoduchý jeden je toArray() a odtiaľ si ich s js po. pozri mongoose dokumentácia
Takis _

vlastne som použiť tieto butget žiadny výsledok 1) konzoly.prihlásenie(štatistiky?._pipeline?.mapa((položka)=> ( <p > {položka[1]} </p>) a 2) štatistiky._pipeline[1]
jdee

ak máte problémy s js, možno položiť novú otázku , môžem použiť java/clojure vo všeobecnosti, ale mnoho ľudí môže pomôcť
Takis _

Ďakujeme som sa pozrieť na to a bude žiadať novú otázku, ak nemohol to urobiť . Ďakujem
jdee
0

Riešenie je nasledovné. S výsledkom[0] výsledkom bude objekt s sumLikes majetku.

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

V iných jazykoch

Táto stránka je v iných jazykoch

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