Ответ 1
Я думал, что вы можете использовать $size
, но это только для поиска массивов определенного размера, не упорядочивая.
Из документации монго: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size
Вы не можете использовать $size для поиска диапазона размеров (например: массивы с более чем 1 элементом). Если вам нужно запросить диапазон, создайте дополнительное поле размера, которое вы увеличиваете при добавлении элементов. Индексы не могут использоваться для части размера $size запроса, хотя, если включены другие выражения запроса, индексы могут использоваться для поиска совпадений в этой части выражения запроса.
Похоже, вы можете довольно легко сделать это с помощью новой структуры агрегации edit:, которая еще не вышла. http://www.mongodb.org/display/DOCS/Aggregation+Framework
Обновить Теперь структура агрегации отсутствует...
> db.test.aggregate([
{$unwind: "$answers"},
{$group: {_id:"$_id", answers: {$push:"$answers"}, size: {$sum:1}}},
{$sort:{size:1}}]);
{
"result" : [
{
"_id" : ObjectId("5053b4547d820880c3469365"),
"answers" : [
{
"content" : "answer1"
},
{
"content" : "2nd answer"
}
],
"size" : 2
},
{
"_id" : ObjectId("5053b46d7d820880c3469366"),
"answers" : [
{
"content" : "answer1"
},
{
"content" : "2nd answer"
},
{
"content" : "The third answer"
}
],
"size" : 3
}
],
"ok" : 1
}