( 1)我怎样才能抓取50多个赞的所有歌曲?结果集应该返回一个歌曲数组,而不是整个文档。
2)如何返回特定歌曲id的结果而不是整个文档?
到目前为止,我已经遇到了用于嵌入式对象的虚拟集合的概念。然而,从那时起,它就一直没有实现。尽管,在相同的链接上,有人建议使用聚合框架来实现这样的事情。这是一个可行的解决办法吗?
我的文件结构如下:
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 }
发布于 2013-05-08 02:08:24
使用这样的聚合框架:
db.songs.aggregate({$unwind:"$songs"},{$match:{"songs.likes":{$gt:50}}})现在,您可以添加其他阶段,比如{$group},如果您希望在一个文档中返回内容,或者添加$project来更改字段名等等。
发布于 2013-05-07 12:13:44
更改文档中的“=>”分隔符。那么您将有一个JSON文件
document = JSON.parse(document)你会得到一个哈希。然后在散列中检查like> 50
document[].each do |song|
song[].each do |id|
if id[likes].to_i > 50
#Do what you want to do
end
end
end希望这有帮助
发布于 2013-05-07 12:23:12
尝试:
songs_arr = []
document["songs"].keys.each do |key|
songs_arr << "insert songs here" if document["songs"][key]["likes"] > 50
endhttps://stackoverflow.com/questions/16418348
复制相似问题