MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongoose / Mongodb Aggregate - nhóm và trung bình nhiều trường

Điều này đã làm việc cho tôi:

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

Đầu ra:

[
  { _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 }
]

NHƯNG sẽ thật tuyệt nếu bằng cách nào đó tôi có thể lọc điều này dựa trên các yếu tố khác. Ví dụ:mỗi bài đăng có một tác giả (tham chiếu đến Mô hình người dùng). Tôi sẽ làm cách nào để lọc dựa trên quốc gia. Tên hoặc giới tính của tác giả?

Mô hình người dùng:

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
}
}) 

Một cái gì đó như thế này

    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. Sắp xếp theo trường ảo trong mongoDB (mongoose)

  2. Phân trang hiệu quả trong MongoDB bằng cách sử dụng mgo.v2 và MongoDB> 4.2

  3. Sao băng không có mongo

  4. Cư trú ảo với Mongoose

  5. Cách tăng tốc truy vấn mongo