I'm using Morphia to access mongoDB. I need to get a list of objects by the length of the inner array. Does any one have an idea how it can be done without getting all the collection to Java and sort it there?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You should create extra field with nested array size and use $inc to update this field.
Also you can use $where , but it very slow.
You search by nested array length like this:
db.coll.find({ $where: "this.nestedArray.length > 3" });
But as i said better to create an extra field.
回答2:
OK I found it :-)
dataStore.find(MyClass.class).order("-inner_array.length").asList();
does the trick.
回答3:
for example:
source data tmb_results_by_tissue_other:
{"base_info":[1,2,3],"type":"123"},
{"base_info":[2,3,4,5],"type":"123"},
by aggregate
db.tmb_results_by_tissue_other.aggregate([{$project:{"type":1, num:{$size:"$base_info"}}},{$sort:{"num":-1}}])