mongoose 可以自动执行查询么?

假设Mongodb中有User、Group两个类型的数据,大致如下:

User {
    name: String,
    age: number,
    groups: [],  // 通过ref关联Group
}

Group {
    name: string,
    userCount: number,
}

GroupuserCount属性表示属于这个Group的用户数量,这个值是需要动态查询出来的,有什么简单的方法处理这种情况么?

我现在是每次查询group的时候再手动查询一下user数量,然后赋值给group.userCount,感觉不是很优雅。

阅读 2.8k
4 个回答

为什么不直接写进去?在增加用户或者减少用户的时候改。

可以使用 populate 帮你在查用户的时候顺便把 groups 的字段具体数据填充完整。

UserMODEL.aggregate([{
    $project:{
        namae:1,
        age:1,
        group:1,
        userCount:{ 
            $cond: { 
                if: { $isArray: "$group" }, 
                then: { $size: "$group" }, 
                else: 0
            } 
        }
    }
  }])
userCount 即为总数

可以添加一个UserGroupMapping表管理User和Group的关系,
于是就可以简单的在这个表查询某个Group的用户数量

UserGroupMapping.aggregate([
    // $lookup & $unwind group
    // $match group.name
    // $count
])

有时候按照关系型数据库设计还是有很多好处的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题