我收集了以下结构:
{
...
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" } }
....
答案 0 :(得分:1)
您可以使用aggregate执行此操作,但您将在途中丢失其他TitleTexts(在结果文档中不是集合):
db.test.aggregate({$unwind: '$TitleComposite'},
{$match:{'TitleComposite.TitleType':"01"}},
{$sort:{'TitleComposite.TitleText':1}})
它会返回由TitleText
和TitleType=01
订购的de文档,但它会在途中丢失其他TitleComosite
元素(简短说明:$unwind
创建一个(结果)TitleComposite
中每个元素的文档,$match
过滤掉TitleType
为01
而$sort
按TitleText
对其进行排序的文档< / p>
创建一个单独的字段(idealy as an index)进行排序可能会更快,但也会让您更改所有文档。