首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算相关集合的计数

计算相关集合的计数
EN

Stack Overflow用户
提问于 2014-03-13 10:02:17
回答 2查看 73关注 0票数 3

我有两个模特专业人员和项目

专业hasMany项目 项目belongsTo专业人员

在“专业人员索引”页面中,我需要显示专业人员的项目数量。

现在,我正在执行以下查询,以获得所有专业人员。如何获取每个专业人员的项目计数。

代码语言:javascript
复制
@pros = Professionals.all.asc(:name)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-13 10:09:44

我想将projects_count添加到专业人员

然后

代码语言:javascript
复制
class Project
  belongs_to :professional, counter_cache: true
end

而且rails将处理每次项目被添加到专业人员或从专业人员中删除时的计数。然后你就可以对每个专业人员做.projects_count了。

编辑:如果你真的想要附加数据

代码语言:javascript
复制
@pros = Professionals.includes(:projects).order(:name)

然后

代码语言:javascript
复制
@pros.each do |pro|
  pro.name
  pro.projects.each do |project|
    project.name
  end
end
票数 2
EN

Stack Overflow用户

发布于 2014-03-13 13:51:32

我只是在这里抽象化,因为铁路的事情真的不是我的包。但是让我们谈谈模式和需要寻找的东西。因此,代码实际上只是“伪代码”,但应该接近所需的内容。

考虑到MongoDB将如何存储数据,并且您可能有多个集合。我不是说这是或不是最好的模型,而只是处理它。

让我们假设我们有“项目”的数据。

代码语言:javascript
复制
{
    "_id" : ObjectId("53202e1d78166396592cf805"),
    "name": "Project1,
    "desc": "Building Project"
},
{
    "_id" : ObjectId("532197fb423c37c0edbd4a52")
    "name": "Project2",
    "desc": "Renovation Project"
}

对于“专业人员”来说,我们可能会有这样的情况:

代码语言:javascript
复制
{
    "_id" : ObjectId("531e22b7ba53b9dd07756bc8"),
    "name": "Steve",
    "projects": [
        ObjectId("53202e1d78166396592cf805"),
        ObjectId("532197fb423c37c0edbd4a52")
    ]
}

正确的。所以,现在我们看到,“专业”必须有某种概念,即在另一个集合中有相关的项目,以及这些相关的项目是什么。

现在我假设,(这不是我的包)有一种方法可以降低Mongoid中驱动程序实现的级别(我相信这是从我的头顶上消失的),并且它很可能(从内存中)被以类似的方式调用(将“专业人员”作为类模型的名称):

代码语言:javascript
复制
Professionals.collection.aggregate([
    { "$unwind": "$projects" },
    { "$group": {
        "_id": "$_id",
        "count": { "$sum": 1 }
    }
])

或者类似的形式,或多或少类似于您在本机mongodb中所做的工作。关键是,通过这样的操作,您只是让服务器完成工作,而不是将所有结果都拖到客户端中,然后循环遍历它们。

建议您使用本机代码来迭代来自数据存储的结果是适得其反的,而且使用任何类型的后端数据库存储都有悖于直觉。无论是由SQL数据库还是NoSQL数据库,一般的首选项都是只要数据库有方法来完成聚合工作,然后使用它们。

如果您正在编写代码,从存储中提取所有记录,然后循环以获得结果,那么您正在做一些错误的事情。

使用数据库方法。否则,您还不如使用一个文本文件并完成它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22374998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档