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/