集合中的数据如下所示:
reset()
我想计算packageName和用户的imei,就像这样:
[{
_id: 0001,
imei:'123456',
apps:[{packageName:'google'},{packageName:'twitter'}]
},{
_id: 0002,
imei:'654321',
apps:[{packageName:'facebook'},{packageName:'twitter'}
}]
我的地图功能是:
[{
packageName:'facebook',
imeis:['123456']
},{
packageName:'google',
imeis:['123456','654321']
},{
packageName:'twitter',
imeis:['123456','654321']
}]
减少功能是:
function(){
emit(this.packageName,this.imei);
};
但结果只有packageName,imeis为null
也许地图功能错了,但我不知道如何重写它。
我是mongoDB的新手。请给我一些建议,thx
答案 0 :(得分:0)
使用聚合框架可以做得更好。
如果您的收藏名称为coll
:
db.coll.aggregate([
{$unwind:"$apps"},
{$group:{
"_id" : "$apps.packageName",
"imeis" : { $addToSet: "$imei" }
}}
],{allowDiskUse: true}
)
$unwind聚合会使apps
数组变平。
packageName
聚合组文档imei
。 $group运算符将所有ZipArchive Object ( [status] => 0 [statusSys] => 0 [numFiles] => 11 [filename] => C:\xampp\htdocs\bitcoinreports\uploads\data123.xlsx [comment] => )
个唯一值分组到数组中。
$addToSet允许您将临时文件用于聚合管道阶段。或者,您可以使用allowDiskUse作为条件过滤器。