如何按内部数组大小对MongoDB查询结果进行排序?

我正在使用Morphia访问mongoDB。 我需要按内部数组的长度获取对象列表。 有没有人知道如何在不将所有集合转换为Java并将其排序的情况下完成它?

您应该使用嵌套数组大小创建额外字段,并使用$ inc更新此字段。

你也可以使用$ where ,但速度很慢。

您可以按嵌套数组长度搜索:

db.coll.find({ $where: "this.nestedArray.length > 3" }); 

但正如我说更好地创造一个额外的领域。

好的我找到了:-)

dataStore.find(MyClass.class).order("-inner_array.length").asList();
诀窍。

例如:

源数据tmb_results_by_tissue_other:

 {"base_info":[1,2,3],"type":"123"}, {"base_info":[2,3,4,5],"type":"123"}, 

通过汇总

 db.tmb_results_by_tissue_other.aggregate([{$project:{"type":1, num:{$size:"$base_info"}}},{$sort:{"num":-1}}])