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

Mongoose/Mongodb Aggregate — grupa i średnia wielokrotność pól

To zadziałało dla mnie:

  Post.aggregate([
    { $group: { _id: "$date", avgRating: { $avg: '$rating' }}}
  ]).
  then(function (res) {
    console.log(res); 
  })

Wyjście:

[
  { _id: 'Aug 18, 2021', avgRating: 3.0212234706616727 },
  { _id: 'Aug 19, 2021', avgRating: 2.9680319680319682 },
  { _id: 'Aug 20, 2021', avgRating: 3.023976023976024 },
  { _id: 'Aug 17, 2021', avgRating: 2.9600665557404326 },
  { _id: 'Aug 21, 2021', avgRating: 3.072661217075386 }
]

ALE byłoby wspaniale, gdybym mógł to jakoś filtrować na podstawie innych czynników. Na przykład każdy post ma autora (odniesienie do modelu użytkownika). Jak mam przejść do filtrowania na podstawie kraju, nazwiska lub płci autora?

Model użytkownika:

const userSchema = new Schema({
email: {
    type: String,
    required: true,
    unique: true
},
birthday: {
    type: Date,
    required: true,
},
gender:{
    type: String,
    required: true
},
country:{
    name: {
        type: String,
        required: true
    },
    flag: {
        type: String,
        // default: "/images/flags/US.png"
    }
},
avatar: AvatarSchema,
displayName: String,
bio: String,
coverColor: {
    type: String,
    default: "#343a40"
},
posts: [ 
    {
    type: Schema.Types.ObjectId,
    ref: "Post" 
    }
],
comments: [
    {
        type: Schema.Types.ObjectId,
        ref: "Comment"
    }
],
postedToday: {
    type: Boolean,
    default: false
},
todaysPost: {
    type: String
}
}) 

Coś takiego

    Post.aggregate([
    {$match: {"date": today}},
    {$group: {_id: {"country": "$author.country.name"}, avgRating: {$avg: "$rating"}}}
]).then(function(res) {
    console.log(res)
})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kolekcja Meteor.js jest pusta na kliencie

  2. Źródło synchronizacji nie zawierało błędu wersji kompatybilności funkcji podczas dodawania elementu MongoDB 3.6 do zestawu replik 3.4

  3. Mongoose zwraca [Object] zamiast faktycznego osadzonego dokumentu

  4. Najlepszy sposób na przechowywanie obrazów w aplikacji internetowej MERN stack

  5. Zegarek Grunt Serve rzuca ostrzeżenie EBUSY na mongod.lock