MongoDB按嵌套对象字段排序集合

时间:2014-08-22 19:43:07

标签: mongodb sorting

我收集了以下结构:

{

...

TitleComposite: [
    {
        TitleType: "01",
        TitleText "Title Important"
    },
    {
        TitleType: "03",
        TitleText: "Not so important"
    }
]

...

}

我想要做的是按TitleComposite.TitleText排序集合,TitleType等于“01”。

因此,只有字符串“Title Important”才会参与排序。我不确定是否可能,如果是,它是否有效?我有相当多的文件集(现在约11 000),也许创建单独的字段只是为了分类目的更好?


UPD

@TrudBert,我尝试了你的建议并提出了以下要求:

db.onix_feed.aggregate(
    {$unwind: '$titleComposite'},
    {$match:{'titleComposite.titleType':"01"}},
    {$sort:{'titleCompostite.titleText':1}},
    {$project: {"titleComposite.titleText":1, "_id": 0}}
)

但是返回结果似乎没有按titleText排序:

{ "titleComposite" : { "titleText" : "Small Scale Mining" } }
{ "titleComposite" : { "titleText" : "Cane Sugar" } }
{ "titleComposite" : { "titleText" : "Microenterprises In Developing Countries" } }
{ "titleComposite" : { "titleText" : "The Development of Indian Silk" } }
{ "titleComposite" : { "titleText" : "Stoves for People" } }
 ....

1 个答案:

答案 0 :(得分:1)

您可以使用aggregate执行此操作,但您将在途中丢失其他TitleTexts(在结果文档中不是集合):

db.test.aggregate({$unwind: '$TitleComposite'},
                  {$match:{'TitleComposite.TitleType':"01"}},
                  {$sort:{'TitleComposite.TitleText':1}})

它会返回由TitleTextTitleType=01订购的de文档,但它会在途中丢失其他TitleComosite元素(简短说明:$unwind创建一个(结果)TitleComposite中每个元素的文档,$match过滤掉TitleType01$sortTitleText对其进行排序的文档< / p>

创建一个单独的字段(idealy as an index)进行排序可能会更快,但也会让您更改所有文档。