首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤出子文档?

如何过滤出子文档?
EN

Stack Overflow用户
提问于 2013-05-07 11:53:09
回答 3查看 105关注 0票数 2

( 1)我怎样才能抓取50多个赞的所有歌曲?结果集应该返回一个歌曲数组,而不是整个文档。

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

到目前为止,我已经遇到了用于嵌入式对象的虚拟集合的概念。然而,从那时起,它就一直没有实现。尽管,在相同的链接上,有人建议使用聚合框架来实现这样的事情。这是一个可行的解决办法吗?

我的文件结构如下:

代码语言:javascript
复制
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' => { '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 }]

( 2):

'1' => { 'views' => { 'non_uniques' => 2000, 'uniques' => 203 }, 'countries' => { 'us' => 123, 'uk' => 11 }, 'likes' => 123, 'comments' => 123 }

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-08 02:08:24

使用这样的聚合框架:

代码语言:javascript
复制
db.songs.aggregate({$unwind:"$songs"},{$match:{"songs.likes":{$gt:50}}})

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

票数 1
EN

Stack Overflow用户

发布于 2013-05-07 12:13:44

更改文档中的“=>”分隔符。那么您将有一个JSON文件

代码语言:javascript
复制
document = JSON.parse(document)

你会得到一个哈希。然后在散列中检查like> 50

代码语言:javascript
复制
document[].each do |song|
    song[].each do |id|    
        if id[likes].to_i > 50
            #Do what you want to do
        end 
    end
end

希望这有帮助

票数 0
EN

Stack Overflow用户

发布于 2013-05-07 12:23:12

尝试:

代码语言:javascript
复制
songs_arr = [] 
document["songs"].keys.each do |key|
  songs_arr << "insert songs here"  if document["songs"][key]["likes"] > 50
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16418348

复制
相关文章

相似问题

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