ruby-on-rails - 我将如何过滤掉子文档?

标签 ruby-on-rails ruby ruby-on-rails-3 mongodb

1)如何抓取点赞数超过50的所有歌曲?结果集应返回一组歌曲而不是整个文档。

2) 如何返回特定歌曲 ID 的结果而不是整个文档?

到目前为止,我遇到了 virtual collections 这个概念对于嵌入对象。但是,此后一直没有实现。虽然,在同一个链接上,有人建议使用聚合框架来做这样的事情。这是可行的解决方案吗?

我有以下文档结构:

document = {
  'date' => Time.now.utc.strftime('%Y%m%d'),
  'songs' => {
    '1' => {
      'views' => {
        'non_uniques' => 2000,
        'uniques' => 203
      },
      'countries' => {
        'us' => 123,
        'uk' => 11
      },
      'likes' => 123,
      'comments' => 123
    },
    '2' => {
      'views' => {
        'non_uniques' => 2000,
        'uniques' => 203
      },
      'countries' => {
        'us' => 123,
        'uk' => 11
      },
      'likes' => 123,
      'comments' => 123
    }
  },
  'sign_ins' => {
    'non_uniques' => 2000,
    'uniques' => 203
  }
}

预期输出(按要求)

对于问题 1),以下行中的某处:

['1' => { '意见'=> { 'non_uniques' => 2000, '独特'=> 203 }, '国家'=> { '我们'=> 123, '英国'=> 11 }, '喜欢'=> 123, '评论'=> 123 }, '2' => { '意见'=> { 'non_uniques' => 2000, '独特'=> 203 }, '国家'=> { '我们'=> 123, '英国'=> 11 }, '喜欢'=> 123, '评论'=> 123 }]

对于 2):

'1' => { '意见'=> { 'non_uniques' => 2000, '独特'=> 203 }, '国家'=> { '我们'=> 123, '英国'=> 11 }, '喜欢'=> 123, '评论'=> 123 }

最佳答案

像这样使用聚合框架:

db.songs.aggregate({$unwind:"$songs"},{$match:{"songs.likes":{$gt:50}}})

现在您可以添加其他阶段,例如 {$group} 如果您希望将内容返回到一个文档中,或者添加 $project 以更改字段名称等。

关于ruby-on-rails - 我将如何过滤掉子文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418348/

相关文章:

ruby-on-rails - rails + Bootstrap : Font path not including base URI (production)

javascript - document.ready 没有触发?

ruby-on-rails - 在formtastic中访问表单对象

ruby - Mongoid 模型警告引用的顶级常量

sql - 如何将这两个 PostgreSQL 语句合并为一个用于 Rails 3 应用程序?

android - 安全 API 访问 : best strategy to secure readonly rails api for android client

ruby-on-rails - Rails 3 中的 ExecJS::RuntimeError

ruby - 为 VIM 安装 RSense

ruby - 是否有一个 if 语句后跟另一个以在 ruby​​ 中以 'and' 运算符 (&&) 结束该行的原因?

ruby - 一行 if-then 没有 else 子句