We have a situration that we are sorting on the f.a.refgene.g field, which is of type List<String>:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> db.VARIANTKB1.find({"_id.p":2706398}, {"_id":1, "f.a.refgene.g":1})
{ "_id" : { "c" : 1, "p" : 2706398, "t" : [ "NOCALL" ] }, "f" : [ { }, { "a" : { "refgene" : [ { "g" : "TTC34" } ] } }, { "a" : { "refgene" : [ { "g" : "TTC34" } ] } }, { }, { "a" : { "refgene" : [ { "g" : "TTC34" } ] } } ] }
> db.VARIANTKB1.find({"_id.p":324100}, {"_id":1, "f.a.refgene.g":1})
{ "_id" : { "c" : 1, "p" : 324100 }, "f" : [ { "a" : { "refgene" : [ { "g" : "LOC100132287" }, { "g" : "LOC100132062" }, { "g" : "LOC100133331" } ] } }, { }, { "a" : { "refgene" : [ { "g" : "LOC100132062" }, { "g" : "LOC100133331" }, { "g" : "LOC100132287" } ] } }, { "a" : { "refgene" : [ { "g" : "LOC100133331" }, { "g" : "RP4-669L17.10" } ] } }, { }, { "a" : { "refgene" : [ { "g" : "LOC100133331" }, { "g" : "RP4-669L17.10" } ] } } ] }
By sorting ascendingly, we expect {"_id":{"c":1,"p":32100}} to come first, because the values are ["LOC100132287", "LOC100132062", "LOC100133331", "LOC100132062", "LOC100133331", "LOC100132287", "LOC100133331", " RP4-669L17.10", "LOC100133331", "RP4-669L17.10"], where as the values for {"_id":{"c":2706398}} are ["TTC34", "TTC34", "TTC34"].
However, mongodb returns just the opposite.
--------------------------------------------------------------------------------------------------------------
> db.VARIANTKB1.find({}, {"_id":1}).sort({"f.a.refgene.g":1}).limit(4)
{ "_id" : "meta" }
{ "_id" : { "c" : 23, "p" : 2699520, "ep" : 154931044, "t" : [ "CNV" ] } }
{ "_id" : { "c" : 1, "p" : 2706398, "t" : [ "NOCALL" ] } }
{ "_id" : { "c" : 1, "p" : 324100 } }
How does mongodb sort Arrays? Is there any workaround to get desired results?
Thanks in advance!