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

时间:2011-04-23 17:51:50

标签: java mongodb morphia

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

3 个答案:

答案 0 :(得分:4)

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

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

您可以按照以下嵌套数组长度进行搜索:

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

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

答案 1 :(得分:3)

好的我找到了: - )

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

答案 2 :(得分:0)

例如:

源数据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}}])