sql >> データベース >  >> NoSQL >> MongoDB

Mongoose /MongodbAggregate-複数のフィールドのグループ化と平均化

    これは私のために働いた:

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

    出力:

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

    しかし、他の要因に基づいてこれを何らかの形でフィルタリングできれば素晴らしいと思います。たとえば、各投稿には作成者がいます(ユーザーモデルへの参照)。著者の国名または性別に基づいてフィルタリングするにはどうすればよいですか?

    ユーザーモデル:

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

    このようなもの

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



    1. NodeJSを使用したMongoDBクエリの評価

    2. React Native-フロントエンドでマングースをインポートできません(ただし、バックエンドからは機能します)

    3. 春のMongodbタイムスタンプタイムゾーン誤解を招く

    4. MongoDBでの年および月ごとの集計