Вот структура часть моей коллекции:
_id: ObjectId("W"),
names: [
{
number: 1,
list: ["A","B","C"]
},
{
number: 2,
list: ["B"]
},
{
number: 3,
list: ["A","C"]
}
...
],
...
Я использую этот запрос:
db.publication.aggregate([ { $match: { _id: ObjectId("54a1de90453d224e80f5fc60") } }, { $group: { _id: "$_id", SizeName: { $first: { $size: { $ifNull: [ "$names", [] ] } } }, names: { $first: "$names" } } } ]);
, но я бы сейчас использовать $ размер в каждом документы моего имена массив.
Можно ли получить этот результат (где «sizeList» является результатом $ размера):
_id: ObjectId("W"),
SizeName: 3,
names: [
{
SizeList: 3,
number: 1,
list: ["A","B","C"]
},
{
SizeList: 1,
number: 2,
list: ["B"]
},
{
SizeList: 2,
number: 3,
list: ["A","C"]
}
...
],
...
Возможно, вы не знали, что оператор [** '$ size' **] (http://docs.mongodb.org/manual/reference/operator/aggregation/size/), на который ссылается OP их вопрос - это функция MongoDB 2.6 и выше, которая эффективно сообщает размер массива. Поэтому больше не нужно разматывать массивы только для подсчета элементов. –
Да, ваш ответ потрясающий, Нейл - Спасибо –