Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb展开聚合结果?_Mongodb_Aggregation Framework - Fatal编程技术网

mongodb展开聚合结果?

mongodb展开聚合结果?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,因此,我尝试使用聚合在数据库中生成一些统计数据 我当前的脚本如下所示: db.posts.aggregate( [ { $group: {_id : "$domain", "counter" : {$sum : 1}}}, { $sort : { counter : -1}}, { $match : { counter : {$gt : 10} } } ]) | _id | counter ---+-------------+-------- 1

因此,我尝试使用聚合在数据库中生成一些统计数据

我当前的脚本如下所示:

db.posts.aggregate( [
    { $group: {_id : "$domain", "counter" : {$sum : 1}}},
    { $sort : { counter : -1}},
    { $match : { counter : {$gt : 10} } }
])
   | _id         | counter
---+-------------+--------
 1 | i.imgur.com | 1220
---+-------------+--------
 2 | imgur.com   | 459
并产生如下结果:

{
    "result" : [ 
        {
            "_id" : "i.imgur.com",
            "counter" : 1220
        }, 
        {
            "_id" : "imgur.com",
            "counter" : 459
        }         
    ],
    "ok" : 1
}
很满意,但我想更进一步。我正在使用robomongo(对我来说更舒适),这对我来说就像是一个文档:

我希望每个结果都是一个单独的文档,如下所示:

db.posts.aggregate( [
    { $group: {_id : "$domain", "counter" : {$sum : 1}}},
    { $sort : { counter : -1}},
    { $match : { counter : {$gt : 10} } }
])
   | _id         | counter
---+-------------+--------
 1 | i.imgur.com | 1220
---+-------------+--------
 2 | imgur.com   | 459
我假设我需要使用$unwind,但失败得很惨:将
{$unwind:“$result”}
添加到聚合链会产生以下输出:

/* 0 */
{
    "result" : [],
    "ok" : 1
}

我做错了什么,怎么做才对?

我不使用robomongo,但似乎您可以在脚本中添加
.result
,以获得所需的结果输出

db.posts.aggregate( [
    { $group: {_id : "$domain", "counter" : {$sum : 1}}},
    { $sort : { counter : -1}},
    { $match : { counter : {$gt : 10} } }
]).result
我已经对此做了一些研究,您得到的返回输出似乎是robomongo使用
db.posts.runCommand(“聚合”),{pipeline:[helper,它创建了一个游标


我认为除了提交一张罚单,你在这方面没有什么可以做的。

首先,你在单个数组中得到了你想要的所有结果吗?其次,如果是格式问题,那么最好手工编写代码。一个$project应该可以做到这一点。你能提供一个结果的JSON对象示例吗?顺便说一句,在管道中越高层
$match
看起来更好。虽然您可能会注意到,对于一个小数据集,在性能上可能没有真正的差异,但对于最佳实践,最好将顺序切换到
$group
$match
$sort
@AshwinBalamohan是的,这里是:老实说,这是我尝试的第一件事,但是esult是一个包含两个字段(0和1)的文档,每个字段都是一个对象,具有
\u id
计数器
字段:编辑:哦,好吧。这对我来说并不重要。我想我会在github上为这个问题打开一个问题。哦,已经有两个了。我相信这回答了我的问题。@amdc和“NoOutlet”按顺序这是您的响应。目前,Robomongo构建在命令和结果方面“锁定”到MongoDB 2.4.x代码库。因此
.aggregate()
无法创建“游标”例如,在较新版本的mongo shell中尽可能多地使用对象。在代码库的问题中引用了很多内容。但是,在构建中集成V8以及与基本构建(或抽象库)更紧密的构建集成之前RoboMongo不太可能在这方面取得进展。RoboMongo聚合输出被固定为一个数组。有趣的是,我发现我的shell扩展获得了与OP中提到的相同的{
结果
ok
}输出,但是获得更好的输出就像发送
{cursor:{}}一样简单
db.runCommand()
的选项中,然后使用
新的DBCommandCursor(this.\u mongo,res)实例化光标;