【问题标题】:Group collection and count some fields using mongoose使用 mongoose 对一些字段进行分组收集和计数
【发布时间】:2020-08-13 22:22:15
【问题描述】:

我有这个模型:

const mongoose = require('mongoose')

const donationSchema = new mongoose.Schema({
  user_id:{
    type:mongoose.Schema.Types.ObjectId,
    required:true
  },
  title:{
    type:String,
    required:true
  },
  description:{
    type:String,
    required:true
  },
  city:{
    type:String,
    required:true
  },
  photo:{
    type:String,
    required:true
  },
  quantity:{
    type:Number,
    required:true,
    default:1
  },
  status:{
    type:String,
    required:true,
    default:"En cours"
  },
  category:{
    type:String,
    required:true
  },
  subscribers:{
    type:[],
    required:false
  },
  value:{
    type:Number,
    required:false
  },
  attribution_date:{
    type:Date,
    required:false
  }
},
  {timestamps:true})

  donationSchema.pre('save', function(next) {
    next()
  })

  module.exports = mongoose.model('Donation', donationSchema)

在我的路由器中,我想根据字段 user_id 聚合集合,并获取集合中 user_id 的重复计数、每个 user_id 的 value 字段的总和以及每个 user_id 的 subscribers 数组中的元素。

这在 SQL 中是可能的,但这是我第一次使用猫鼬,所以如果你能帮助我,我将不胜感激。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    你可以使用下面的聚合

    db.collection.aggregate([
      { "$group": {
        "_id": "$user_id",
        "countOfUsers": { "$sum": 1 },  //Count the number of user ids
        "subscribersCount": { "$sum": { "$size": "$subscribers" }}  // Get the size of the subscribers array and make summation
      }}
    ])
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多