标签: aggregation-framework

我可以在MongoDB聚合查询中获得第一个文档(不是字段)吗?

聚合框架示例中,有第一个和最后一个示例:

db.zipcodes.aggregate( { $group:
                         { _id: { state: "$state", city: "$city" },
                           pop: { $sum: "$pop" } } },
                       { $sort: { pop: 1 } },
                       { $group:
                         { _id : "$_id.state",
                           biggestCity:  { $last: "$_id.city" },
                           biggestPop:   { $last: "$pop" },
                           smallestCity: { $first: "$_id.city" },
                           smallestPop:  { $first: "$pop" } } }
Run Code Online (Sandbox Code Playgroud)

我可以获得完整的zipcodes文档$first吗?

编辑:

为了澄清,我在我的快递应用程序中使用coffeescript执行以下操作,看起来很愚蠢:

@aggregate(
  {
    $group :  
      _id : "$category" 
      cnt : { $sum : 1 }
      id: {$first: "$_id"}
      name: {$first: …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

7
推荐指数
1
解决办法
4981
查看次数

有没有办法以mongodb聚合管道中的epoch(Date.getTime())之后的毫秒访问日期

MongoDB中提供了大量的" Date Aggregation Operators",如$dayOfYear,$dayOf Month$millisecond.该$millisecond函数只返回时间戳的毫秒数,范围为0-999.

Date从聚合管道中的纪元开始,有没有办法以毫秒为单位访问对象?

谢谢,

弥敦道

date mongodb aggregation-framework

7
推荐指数
1
解决办法
2629
查看次数

mongodb单个操作中的多个聚合

我有一个带有以下文件的物品集合.

{ "item" : "i1", "category" : "c1", "brand" : "b1" }  
{ "item" : "i2", "category" : "c2", "brand" : "b1" }  
{ "item" : "i3", "category" : "c1", "brand" : "b2" }  
{ "item" : "i4", "category" : "c2", "brand" : "b1" }  
{ "item" : "i5", "category" : "c1", "brand" : "b2" }  
Run Code Online (Sandbox Code Playgroud)

我想分开汇总结果 - >按类别计算,按品牌计算.请注意,不计入(类别,品牌)

我可以使用map-reduce使用以下代码执行此操作.

map = function(){
    emit({type:"category",category:this.category},1);
    emit({type:"brand",brand:this.brand},1);
}
reduce = function(key, values){
    return Array.sum(values)
}
db.item.mapReduce(map,reduce,{out:{inline:1}})
Run Code Online (Sandbox Code Playgroud)

结果是

{
        "results" : [
                { …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

7
推荐指数
2
解决办法
4461
查看次数

Mongodb聚合按天计算

我正在使用mongodb聚合来聚合数据集.我的情况有点复杂.我有一个如下集合:

{
  startTime: ISODate("2014-12-31T10:20:30Z"),
  customerId: 123,
  ping: "2",
  link: "3"
}
Run Code Online (Sandbox Code Playgroud)

现在我想将数据聚合到另一个集合,如下所示:

{
_id: {
 day: ISODate("2014-12-31T00:00:00Z"),
 customerId: 123
 },
hours: [
  {
   hour: ISODate("2014-12-31T10:00:00Z"),
   pings: 2,
   links: 3
  },
  {
   hour: ISODate("2014-12-31T11:00:00Z"),
   pings: 5,
   links: 6
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,数据首先是按天分组,然后是按小时分组.我有以下聚合查询按天分组,但是如何按小时将它们分组?任何的想法?

var pipeline = [
{
 $project : {  
       startTime : 1,
               customerId: 1,
       ping:1,
       link:1,
       date : "$startTime",  
       h : {  
            "$hour" : "$startTime"  
       },  
       m : {  
            "$minute" : "$startTime"  
       },  
       s : {  
            "$second" : "$startTime"  
       }, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

7
推荐指数
1
解决办法
6896
查看次数

Mongodb中的聚合查询返回特定字段

文件样本:

{
    "_id" : ObjectId("53329dfgg43771e49538b4567"),
    "u" : {
        "_id" : ObjectId("532a435gs4c771edb168c1bd7"),
        "n" : "Salman khan",
        "e" : "salman@gmail.com"
    },
    "ps" : 0,
    "os" : 1,
    "rs" : 0,
    "cd" : 1395685800,
    "ud" : 0
}
Run Code Online (Sandbox Code Playgroud)

查询:

db.collectiontmp.aggregate([
            {$match: {os:1}},
            {$project : { name:{$toUpper:"$u.e"} , _id:0 } },
            {$group: { _id: "$u._id",total: {$sum:1} }},
            {$sort: {total: -1}}, { $limit: 10 }
             ]);
Run Code Online (Sandbox Code Playgroud)

我需要从上面的查询中得到以下内容:

  1. 通过...分组 u._id
  2. 返回记录中的记录和电子邮件总数,如下所示:

    {"result":[{"email":"","total":""},{"email":"","total":""}},"ok":1}

mongodb mongodb-query aggregation-framework

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

将字符串拆分为MongoDB中的子字符串或字符数组

我需要转换这样的字段:

{ 
    "_id" : ObjectId("576fd6e87d33ed2f37a6d526"), 
    "phoneme" : "JH OY1 N Z" 
}
Run Code Online (Sandbox Code Playgroud)

进入像这样的子串数组

{ 
    "_id" : ObjectId("576fd6e87d33ed2f37a6d526"), 
    "phonemes" : [ "JH", "OY1", "N", "Z" ] 
}
Run Code Online (Sandbox Code Playgroud)

有时会变成像这样的字符数组

{
    "_id" : ObjectId("576fd6e87d33ed2f37a6d526"), 
    "phonemes" : ["J", "H", " ", "O", "Y", "1", " ", "N", " ", "Z"]
}
Run Code Online (Sandbox Code Playgroud)

我在这里发现了一些将字符串转换为数组的代码,但是对于我的目的来说有点太简单了,因为只创建了一个数组元素.

db.members.find().snapshot().forEach( function (x) {
   x.photos = [{"uri": "/images/" + x.photos}];
   db.members.save(x);
 });
Run Code Online (Sandbox Code Playgroud)

我是否可以在mongo shell语句中使用整个javascript语言?

string mongodb aggregation-framework

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

MongoDB嵌套对象聚合计数

我有一个高度嵌套的mongoDB对象集,我想计算匹配给定条件Edit的子文档数:(在每个文档中).例如:

{"_id":{"chr":"20","pos":"14371","ref":"A","alt":"G"},
"studies":[
    {
        "study_id":"Study1",
        "samples":[
            {
                "sample_id":"NA00001",
                "formatdata":[
                    {"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
                ]
            },
            {
                "sample_id":"NA00002",
                "formatdata":[
                    {"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
                ]
            }
        ]
    }
]
}
{"_id":{"chr":"20","pos":"14372","ref":"T","alt":"AA"},
"studies":[
    {
        "study_id":"Study3",
        "samples":[
            {
                "sample_id":"SAMPLE1",
                "formatdata":[
                    {"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
                ]
            },
            {
                "sample_id":"SAMPLE2",
                "formatdata":[
                    {"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
                ]
            }
        ]
    }
]
}
{"_id":{"chr":"20","pos":"14373","ref":"C","alt":"A"},
"studies":[
    {
        "study_id":"Study3",
        "samples":[
            {
                "sample_id":"SAMPLE3",
                "formatdata":[
                    {"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
                ]
            },
            {
                "sample_id":"SAMPLE7",
                "formatdata":[
                    {"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
                ]
            }
        ]
    }
]
}
Run Code Online (Sandbox Code Playgroud)

我想知道有多少子文档包含GT:"1 | 0",在这种情况下,在第一个文档中为1,在第二个文档中为2,在第3个文档中为0.我已经尝试了展开和聚合函数,但我显然没有做正确的事情.当我尝试通过"GT"字段计算子文档时,mongo抱怨:

db.collection.aggregate([{$group: {"$studies.samples.formatdata.GT":1,_id:0}}])
Run Code Online (Sandbox Code Playgroud)

因为我的小组的名字不能包含".",但如果我把它们留下:

db.collection.aggregate([{$group: {"$GT":1,_id:0}}])
Run Code Online (Sandbox Code Playgroud)

它抱怨因为"$ GT不能是运营商名称"

有任何想法吗?

mongodb mongodb-query aggregation-framework

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

具有数组值总和的MongoDB聚合

我有一个包含以下数据的集合:

{
    "_id" : ObjectId("5516d416d0c2323619ddbca8"),
    "date" : "28/02/2015",
    "driver" : "user1",
    "passengers" : [
        {
            "user" : "user2",
            "times" : 2
        },
        {
            "user" : "user3",
            "times" : 3
        }
    ]
}
{
    "_id" : ObjectId("5516d517d0c2323619ddbca9"),
    "date" : "27/02/2015",
    "driver" : "user2",
    "passengers" : [
        {
            "user" : "user1",
            "times" : 2
        },
        {
            "user" : "user3",
            "times" : 2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

并且我想执行聚合以便我知道某个乘客,与某个驱动程序相关的时间,在我的示例中它将是:对于user1:[{ driver: user2, times: 2}] 对于user2:[{ driver: user1, times: 2}] 对于user3:[{ driver: user1, times: …

mongodb mongodb-query aggregation-framework

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

获取总计数和Mongoose Query skip&limt

我有一个包含许多对象的json数据.我想限制分页数据,我需要总项数.请帮忙.

Model.find().skip((pageNumber-1)*limit).limit(limit).exec()
Run Code Online (Sandbox Code Playgroud)

我想要计数和跳过数据作为回应.

database mongoose mongodb node.js aggregation-framework

7
推荐指数
4
解决办法
6556
查看次数

MongoDB:$ divide和$ multiply错误

我正在创建一个MongoDB聚合管道,我在这个阶段陷入困境:

        $group: {
            _id: {checkType: "$_id.checkType", resultCode: "$_id.resultCode"},
            count: { $sum: "$count" },
            ctv: { $sum: "$ctv" },
            perc:{$multiply:[{$divide:["$ctv","$count"]},100]},
            weight: { $divide: [ "$ctv", "$count"] },
            details: { $push: "$$ROOT" }
        }
Run Code Online (Sandbox Code Playgroud)

它给出错误"$ multiply accumulator是一元运算符".类似地,如果我用$ multiply删除该行,则在后续行中得到"$ divide accumulator是一元运算符".我在网上找不到这个错误的描述.我的sintax有什么问题?

mongodb aggregation-framework

7
推荐指数
1
解决办法
7251
查看次数