2011-04-23 97 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}}]) 
相關問題