2011-04-23 99 views

回答

3

OK,我发现它:-)

dataStore.find(MyClass.class).order("-inner_array.length").asList();
的伎俩。

+3

我很确定这个查询实际上不工作。它可以执行而不会给出错误,但是当我在mongo shell中尝试类似的东西时,实际上没有任何排序。 – 2014-04-09 13:28:46

+0

不起作用... – Antoine 2016-03-29 00:44:09

4

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

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

您搜索的嵌套数组长度是这样的:

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

但正如我所说更好地创建一个额外的字段。

+0

感谢安德鲁,但是这不是我要找的。我使用Morphia作为POJO映射器,所以我不想添加不相关的字段。以任何方式,所有的JavaScript数组都有一个length属性。我想知道是否有方法在查询中使用它。 – tsinik 2011-04-23 21:18:23

+1

不,没有办法做到这一点;不支持按函数排序,也不存在数组长度的合成域。这意味着现在你需要存储一个计数,如果你想嵌入它并对其进行排序。小心你如何更新它。 – 2011-04-24 01:45:11

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}}]) 
相关问题