标签: aggregation-framework

使用组计数获取$ group结果

假设我有一个名为"posts"的集合(实际上它是一个更复杂的集合,帖子太简单了),具有以下结构:

> db.posts.find()

{ "_id" : ObjectId("50ad8d451d41c8fc58000003"), "title" : "Lorem ipsum", "author" : 
"John Doe", "content" : "This is the content", "tags" : [ "SOME", "RANDOM", "TAGS" ] }
Run Code Online (Sandbox Code Playgroud)

我希望这个集合能够跨越数十万甚至数百万,我需要按标签查询帖子并按标签对结果进行分组并显示分页结果.这就是聚合框架的用武之地.我计划使用aggregate()方法来查询集合:

db.posts.aggregate([
  { "$unwind" : "$tags" },
  { "$group" : {
      _id: { tag: "$tags" },
      count: { $sum: 1 }
  } }
]);
Run Code Online (Sandbox Code Playgroud)

问题是要创建分页符,我需要知道输出数组的长度.我知道要做到这一点你可以这样做:

db.posts.aggregate([
  { "$unwind" : "$tags" },
  { "$group" : {
      _id: { tag: "$tags" },
      count: { $sum: 1 }
  } }
  { "$group" : { …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

25
推荐指数
1
解决办法
2万
查看次数

如何使用多个$ cond对查询进行分组?

我想查询如下,但这只包含一个$cond.

如何用两个查询$cond

collection.aggregate(
    { 
        $match : { 
            '_id' : {$in:ids}
        } 
    },
    {
        $group: {
            _id: '$someField',
            ...
            count: {$sum: { $cond: [ { $eq: [ "$otherField", false] } , 1, 0 ] }}
        }
    },
    function(err, result){
        ...
    }
);
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

25
推荐指数
1
解决办法
3万
查看次数

MongoDB中的数据类型转换

我有一个名为Document in MongoDB的集合.此集合中的文档具有以ISO日期类型存储的名为CreationDate的字段.我的任务是计算每天创建的文档数量,并按异步数量排序.输出格式必须是[{_id:'yyyy-MM-dd',cnt:x}].我尝试使用如下聚合框架.

db.Document.aggregate( 
    , {$project: {_id:1, Year:{$year:'$CreationDate'}, Month:{$month:'$CreationDate'}, Date:{$dayOfMonth:'$CreationDate'}}}
    , {$group: {_id:{$concat:['$Year', '-', '$Month', '-', '$Date']}, cnt:{$sum:1}}}
    , {$sort:{'cnt':-1}}
);
Run Code Online (Sandbox Code Playgroud)

代码给出了如下错误:

$concat only supports strings, not NumberInt32
Run Code Online (Sandbox Code Playgroud)

我明白这是因为$ year,$ month和$ dayOfMonth都返回了数字.可以将_id字段组合为对象,并在应用程序级别以所需格式重新格式化它.

但从技术角度来看,我有两个问题:

  1. 如何在MongoDB shell中将数字转换为字符串?在这种情况下,$ year的输出可以转换为字符串并在$ concat中使用.

  2. 有没有更好的方法将ISODate输出格式化为各种日期格式?在许多情况下,我们只需要ISODate的某些部分,例如:日期组件或时间部分.是否有任何MongoDb内置运营商来实现这一目标?

提前感谢任何建议.

mongodb mongodb-query aggregation-framework

25
推荐指数
2
解决办法
1万
查看次数

如何$项目将ObjectId投影到mongodb聚合中的字符串值?

是否有一个我可以在聚合函数中使用的运算符来获取字符串而不是ObjectId作为响应?

db.something.aggregate([ {$match: {'property': {$exists:true}} }, {$project: {stringId: '$_id.???'}}])
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

25
推荐指数
2
解决办法
2万
查看次数

Mongodb排序内部数组

我一直在寻找一段时间,似乎无法对内部数组进行排序,并将其保留在我正在使用的文档中.

{
    "service": {
        "apps": {
            "updates": [
              {
                "n" : 1
                "date": ISODate("2012-03-10T16:15:00Z")
              },
              {
                "n" : 2
                "date": ISODate("2012-01-10T16:15:00Z")
              },
              {
                "n" : 5
                "date": ISODate("2012-07-10T16:15:00Z")
              }
            ]
        }
     }
 }
Run Code Online (Sandbox Code Playgroud)

所以我想保持项目作为服务返回,但我的更新数组已排序.到目前为止,我有shell:

db.servers.aggregate(
        {$unwind:'$service'},
        {$project:{'service.apps':1}},
        {$unwind:'$service.apps'}, 
        {$project: {'service.apps.updates':1}}, 
        {$sort:{'service.apps.updates.date':1}});
Run Code Online (Sandbox Code Playgroud)

有人认为他们可以提供帮助吗?

mongodb aggregation-framework

24
推荐指数
3
解决办法
2万
查看次数

Mongodb Aggregation Framework:$ group使用索引吗?

我正在尝试使用聚合框架$match$group阶段.$group阶段是否使用索引数据?我正在使用最新的mongodb版本 - 2.5.4

performance mongodb aggregation-framework

24
推荐指数
3
解决办法
1万
查看次数

Mongo $ group with $ project

我正在尝试获取关键字计数parentId,categioryIdllcId.我的数据库是

{
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"),
    "keyword" : "electronic content management system",
    "llcId" : "CL1K9B",
    "categoryId" : "CL1K8V",
    "parentId" : "CL1K8V",

}
Run Code Online (Sandbox Code Playgroud)

我试过$project$group

db.keyword.aggregate([
    {
        $group: {
            _id: "$llcId",
            total: {$sum: 1},
        }
    },
    {
        $project: {
            categoryId: 1, total: 1
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

它给了我一个结果

{ "_id" : "CL1KJQ", "total" : 17 }
{ "_id" : "CL1KKW", "total" : 30 }
Run Code Online (Sandbox Code Playgroud)

但我需要的结果也如实际数据llcId,categoryId,keyword,total.我尝试使用显示cetgoryId和关键字, …

mongodb aggregation-framework

24
推荐指数
2
解决办法
3万
查看次数

MongoDB正则表达式搜索整数值

我想要正则表达式搜索MongoDB中的整数值.这可能吗?

我正在构建一个CRUD类型的接口,允许*在各个字段上使用通配符.我试图保持UI与整数的几个字段保持一致.

考虑:

> db.seDemo.insert({ "example" : 1234 });
> db.seDemo.find({ "example" : 1234 });
{ "_id" : ObjectId("4bfc2bfea2004adae015220a"), "example" : 1234 }
> db.seDemo.find({ "example" : /^123.*/ });
> 
Run Code Online (Sandbox Code Playgroud)

如您所见,我插入一个对象,我可以通过值找到它.如果我尝试一个简单的正则表达式,我实际上找不到该对象.

谢谢!

regex mongodb mongodb-query aggregation-framework

23
推荐指数
2
解决办法
2万
查看次数

在同一个mongodb查询中选择按计数分组和不同计数

我想做点什么

select campaign_id,campaign_name,count(subscriber_id),count(distinct subscriber_id)
group by campaign_id,campaign_name from campaigns;
Run Code Online (Sandbox Code Playgroud)

此查询给出除count之外的结果(distinct subscriber_id)

db.campaigns.aggregate([
    {$match: {subscriber_id: {$ne: null}}},
    {$group: { 
        _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
        count: {$sum: 1}
    }}
])
Run Code Online (Sandbox Code Playgroud)

以下查询给出除count(subscriber_id)之外的结果

db.campaigns_logs.aggregate([
    {$match : {subscriber_id: {$ne: null}}},
    {$group : { _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name",subscriber_id: "$subscriber_id"}}},
    {$group : { _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"}, 
                count: {$sum: 1}
              }}
])
Run Code Online (Sandbox Code Playgroud)

但我希望count(subscriber_id),count(distinct subscriber_id)在同一个结果中

mongodb mongodb-query aggregation-framework

23
推荐指数
2
解决办法
3万
查看次数

MongoDB使用$ lookup聚合运算符进行分片

$lookup是MongoDB 3.2中的新功能.它对同一数据库中的未整数集合执行左外连接,以过滤来自"已连接"集合的文档以进行处理.

要使用$lookup,from集合不能分片.

另一方面,分片是一种有用的水平缩放方法.

将它们组合在一起的最佳做法是什么?

sharding left-join mongodb aggregation-framework

23
推荐指数
1
解决办法
4702
查看次数