在子文档python瓶上排序

时间:2014-02-14 04:55:24

标签: python mongodb bottle

我正在运行一个瓶子框架和MongoDB。在下面的字典中,我需要在排名后对子字典进行排序。 Mongo不支持子文档的排序(除非我用$ push排序),我宁愿对python和模板中的媒体数组进行“rank”排序。

“条目”:

{ 
"_id" :"...",
"author" : "...",
"body" : "...",
"date" : ...,
"media" : [
            {
                    "caption" : "Drone",
                    "rank" : "2",
                    "media_link" : "34.jpg"
            },
            {
                    "caption" : "Tea drinker",
                    "rank" : "1",
                    "media_link" : "87.jpg"
            },
            {

                    "caption" : "Daniele",
                    "rank" : "3",
                    "media_link" : "54.jpg"
            }
    ],

}

模板代码,我想按排名进行排序。

%if ('media' in entry): 
%numMedia = len(entry['media']) 
%else:
%numMedia = 0               
%end


%for i in range(0, numMedia):
<td valign="top">
<img width='200' src='{{entries['media'][i]['media_link']}}'><br>
Media Caption: {{entries['media'][i]['caption']}}<br>
Rank: {{entries['media'][i]['rank']}}</td>
%end

我尝试了几种不同的方法,但无法让它发挥作用..

1 个答案:

答案 0 :(得分:1)

您好,欢迎TomSjogren, 基本上你需要像这样对集合列表进行排序:

media = entry['media']
sorted_media = sorted(media, key=lambda m:m['rank'])

我不熟悉django,但我认为那就是这样:

%for m in sorted_media:
    <td valign="top">
    <img width='200' src='{{m['media_link']}}'><br>
    Media Caption: {{m['caption']}}<br>
    Rank: {{m['rank']}}</td>
%end