Соберите коллекцию и подсчитайте некоторые поля, используя мангуст - PullRequest
1 голос
/ 29 апреля 2020

У меня есть эта модель:

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 и количество элементов в массиве подписчиков для каждого user_id.

Это возможно в SQL, но это мой первый опыт общения с пн goose, поэтому, если бы вы могли мне помочь, я был бы благодарен.

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете использовать ниже агрегации

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