对MongoDB中的嵌套字段进行排序

时间:2014-07-31 23:28:06

标签: mongodb pymongo nested-lists

我有以下数据结构:

{  
  'url' : 'www.example.com',
  'title' : 'This is a title',
  'data' : [ 
             [{'name': 'abcdefg'}, {'nmr': 'hijklmnop'}],
             [{'name': 'hijklmnop'}, {'nmr': 'abcdefg'}]
          ]
},

{  
  'url' : 'www.example_2.com',
  'title' : 'This is a title_2',
  'data' : [ 
             [{'name': 'abcdefg'}, {'nmr': 'hijklmnop'}],
             [{'name': 'hijklmnop'}, {'nmr': 'abcdefg'}],
             [{'name': 'abcdefg'}, {'nmr': 'hijklmnop'}]
           ]
}

我需要排序' url' (降序)根据'数据'中的名称总数。我希望看到这样的事情:

www.example_2.com:3

www.example.com:2

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用aggregate中的$size运算符来访问数组字段的大小,然后使用$sort

在shell中:

db.test.aggregate([
    {$project: {url: 1, count: {$size: '$data'}}},
    {$sort: {count: -1}}
])

<强>输出

{
    "result" : [ 
        {
            "_id" : ObjectId("53dadaf8393fa0461f92333c"),
            "url" : "www.example_2.com",
            "count" : 3
        }, 
        {
            "_id" : ObjectId("53dadaf8393fa0461f92333b"),
            "url" : "www.example.com",
            "count" : 2
        }
    ],
    "ok" : 1
}