$project
для сохранения tag
и count
в tmp
$push
или addToSet
для сохранения tmp
в вашем списке data
. Код:
db.test.aggregate(
{$unwind: '$tags'},
{$group:{_id: '$tags', count:{$sum:1}}},
{$project:{tmp:{tag:' - Используйте
$project
для сохранения tag
и count
в tmp
- Используйте
$push
или addToSet
для сохранения tmp
в вашем списке data
.
Код:
[110] Выход:
{
"result" : [
{
"_id" : null,
"total" : 5,
"data" : [
{
"tag" : "SOME",
"count" : 1
},
{
"tag" : "RANDOM",
"count" : 2
},
{
"tag" : "TAGS1",
"count" : 1
},
{
"tag" : "TAGS",
"count" : 1
},
{
"tag" : "SOME1",
"count" : 1
}
]
}
],
"ok" : 1
}
id', count:'$count'}}},
{$group:{_id:null, total:{$sum:1}, data:{$addToSet:'$tmp'}}}
)
Выход:
{
"result" : [
{
"_id" : null,
"total" : 5,
"data" : [
{
"tag" : "SOME",
"count" : 1
},
{
"tag" : "RANDOM",
"count" : 2
},
{
"tag" : "TAGS1",
"count" : 1
},
{
"tag" : "TAGS",
"count" : 1
},
{
"tag" : "SOME1",
"count" : 1
}
]
}
],
"ok" : 1
}
Навскидку, я не знаю, почему метод так долго возвращается. Это заслуживает внимания на списке разработчиков какао или на другом форуме Apple. Я полагаю, что управлять событиями самостоятельно - плохая идея - AppKit оптимизирован для этого, и вы можете спокойно поспорить, что он будет намного быстрее, чем собранный вместе собственный код.
Однако есть кое-что, что вы можете сделать, чтобы сохранить это не повлияет на вашу игру: поместите его в отдельный поток. Это предлагаемый подход, чтобы ваш пользовательский интерфейс не зависал во время длительного вызова метода. Apple опубликовала Введение в руководство по программированию потоков , которое поможет вам быстро освоить важные концепции, которые вам понадобятся.