tsinik
tsinik

Reputation: 503

How can I sort MongoDB query results by inner array size?

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?

Upvotes: 5

Views: 8939

Answers (3)

shou
shou

Reputation: 1

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}}])

Upvotes: 0

tsinik
tsinik

Reputation: 503

OK I found it :-)

dataStore.find(MyClass.class).order("-inner_array.length").asList();
does the trick.

Upvotes: 3

Andrew Orsich
Andrew Orsich

Reputation: 53685

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.

Upvotes: 4

Related Questions