标签: aggregation-framework

MongoDB聚合:从前一行的总和计算运行总计

样本文件:

{
 _id: ObjectId('4f442120eb03305789000000'),
 time: ISODate("2013-10-10T20:55:36Z"),
 value:1
},
{
 _id: ObjectId('4f442120eb03305789000001'),
 time: ISODate("2013-10-10T28:43:16Z"),
 value:2
},
{
 _id: ObjectId('4f442120eb03305789000002'),
 time: ISODate("2013-10-11T27:12:66Z"),
 value:3
},
{
 _id: ObjectId('4f442120eb03305789000003'),
 time: ISODate("2013-10-11T10:15:38Z"),
 value:4
},
{
 _id: ObjectId('4f442120eb03305789000004'),
 time: ISODate("2013-10-12T26:15:38Z"),
 value:5
}
Run Code Online (Sandbox Code Playgroud)

可以轻松获得按日期分组的聚合结果.但我想要的是查询返回聚合的运行总计的结果,如:

{
 time: "2013-10-10"
 total: 3,
 runningTotal: 3
},
{
 time: "2013-10-11"
 total: 7,
 runningTotal: 10 
},
{
 time: "2013-10-12"
 total: 5,
 runningTotal: 15
}
Run Code Online (Sandbox Code Playgroud)

这可能与MongoDB聚合有关吗?

mongodb mongoid aggregation-framework

10
推荐指数
1
解决办法
1578
查看次数

比较MongoDB中的两个日期字段

在我的收藏中,每个文档都有2个日期,修改和同步.我想找到那些修改>同步或同步不存在的那些.

我试过了

{'modified': { $gt : 'sync' }}
Run Code Online (Sandbox Code Playgroud)

但它没有表现出我的预期.有任何想法吗?

谢谢

datetime mongodb node.js mongodb-query aggregation-framework

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

mongodb的$项目是否有可能返回一个数组?

MongoDb的$ project聚合运算符是否可以将文档重组为数组?

这是我到目前为止所做的:

var pipeline = [];
var project = {
    $project : {
        x: "$_id", 
        y: "$y" ,
        _id : 0
    }
};
pipeline.push(project);
model.aggregate( pipeline, callback);
Run Code Online (Sandbox Code Playgroud)

这给了我输出的形式:

[
  { 
   x: '...',
   y: '...'
  }
 ....
]
Run Code Online (Sandbox Code Playgroud)

我想拥有:

[
   ['..','..']
   ....
]
Run Code Online (Sandbox Code Playgroud)

我可以通过迭代来轻松地重构输出,但是真的很想知道聚合本身是否可以返回数组而不是对象.

mongodb node.js aggregation-framework

10
推荐指数
1
解决办法
4656
查看次数

Mongodb找到子数组

我有一个文档设置如下:

{
  _id : ObjectId(),
  info : [ 
        [ 
            1399583281000, 
            20.13
        ], 
        [ 
            1399583282000, 
            20.13
        ], 
        [ 
            1399583283000, 
            20.13
        ], 
        [ 
            1399583285000, 
            20.13
        ], 
        [ 
            1399583286000, 
            20.13
        ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

这些数据可以分布在多个文档中.通常,每个文档包含59个周期(秒)的信息中的数据.

我想要做的是获取时间戳大于特定时间的所有信息数据.

有什么想法我会这样做吗?

谢谢

编辑:

所以,我发现这似乎返回了所有文件:

db.infos.find({
   info:{
      $elemMatch:{
         0:{
            $gt:1399583306000
         }
      }
   }
})
Run Code Online (Sandbox Code Playgroud)

但也许我需要在聚合查询中使用它?这样它只会返回所有值?

database mongodb mongodb-query aggregation-framework

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

MongoDB:使用$ in的聚合聚合失败

Objects在mongo集合中有以下两个名为cars:

{vendor: "BMW",
model: "325i",
class: "coupe",
equipment: [
    {name: "airbag",
     cost: 120
    },
    {name: "led",
     cost: 170
    },
    {name: "abs",
     cost: 150
    }
 ]
}

{vendor: "Mercedes",
model: "C 250",
class: "coupe",
equipment: [
    {name: "airbag",
     cost: 180
    },
    {name: "esp",
     cost: 170
    },
    {name: "led",
     cost: 120
    }
 ]
}
Run Code Online (Sandbox Code Playgroud)

我正在玩Mongo 2.6中引入的新聚合功能redact我想执行查询以获取带有过滤设备部件的汽车列表.用语言:给我所有类型的轿跑车,只有关于LEDAIRBAG设备的信息.

我试过这个聚合:

db.cars.aggregate(
    [
        {$match: {"class": "coupe"}},
        {$redact:
        {
            $cond:
            {
                if: { $in : ["$name", ["airbag", …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

10
推荐指数
1
解决办法
3118
查看次数

日期之间的MongoDB C#驱动程序聚合返回空字段

我正在使用mongodb的c#驱动程序,并希望对我正在创建的Web API使用聚合查询.对于我的聚合查询,我关注的是具有用户名,日期和步骤的配置文件类.我想创建一个查询,选择用户名并获取给定周的总步数,按总步数降序排列.我只想显示他们的用户名和他们的总步数.

当我尝试聚合查询时,我遇到了一些问题,我的某些字段将显示为null.所以,我认为我的查询结构不正确.

我有一个"配置文件"类,我目前用于我的数据.

[BsonIgnoreExtraElements]
[DataContract]
public class Profile 
{   
    [DataMember]
    public string Username { get; set; }

    [DataMember]
    public DateTime Date { get; set; }

    [DataMember]
    public uint? Steps { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法创建了一些测试数据,例如配置文件

//Test data
for (uint index = 1; index < 20; index++)
{      
    Profile aprofile = new Profile
    {   
        Username = string.Format("testuser{0}", index),
        Date = RandomDay(),
        Steps = (index + index + index)*2

    };
    AddProfile(aprofile);
}
Run Code Online (Sandbox Code Playgroud)

如果我运行代码几次并查询特定用户,我得到的数据如下:

[{"Username":"testuser1","Date":"2014-07-03T00:00:00Z","Steps":6},
{"Username":"testuser1","Date":"2014-07-07T05:00:00Z","Steps":6},
{"Username":"testuser1","Date":"2014-07-17T05:00:00Z","Steps":6},
{"Username":"testuser1","Date":"2014-07-18T05:00:00Z","Steps":6}]
Run Code Online (Sandbox Code Playgroud)

然后,我有几个静态方法来查找我的聚合查询的最早日期和最新日期.

//gets a datetime …
Run Code Online (Sandbox Code Playgroud)

c# mongodb aggregation-framework mongodb-.net-driver

10
推荐指数
1
解决办法
1694
查看次数

MongoDb聚合$匹配错误:"参数必须是聚合管道运算符"

我可以获得该网站的所有统计数据,aggregation但我想为某个用户提供,例如$where.

所有统计数据:

games.aggregate([{
                $group: {
                    _id: '$id',
                    game_total: { $sum: '$game_amount'}, 
                    game_total_profit: { $sum: '$game_profit'}}
                }]).exec(function ( e, d ) {

                    console.log( d )            

            })
Run Code Online (Sandbox Code Playgroud)

当我尝试使用$match运算符时,我收到错误:

games.aggregate([{
                $match: { '$game_user_id' : '12345789' },
                $group: {
                    _id: '$id',
                    game_total: { $sum: '$game_amount'}, 
                    game_total_profit: { $sum: '$game_profit'}}
                }]).exec(function ( e, d ) {

                    console.log( d )            

            })

Arguments must be aggregate pipeline operators
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

javascript mongodb node.js mongodb-query aggregation-framework

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

mongo组和有条件的计数

我正在尝试对一组文档进行分组,并根据它们的值来计算它们.例如

{ "_id" : 1, "item" : "abc1", "value" : "1" }
{ "_id" : 2, "item" : "abc1", "value" : "1" }
{ "_id" : 3, "item" : "abc1", "value" : "11" }
{ "_id" : 4, "item" : "abc1", "value" : "12" }
{ "_id" : 5, "item" : "xyz1", "value" : "2" }
Run Code Online (Sandbox Code Playgroud)

在这里,我想按"项目"进行分组,并获得一个计数"数值"大于10的次数和小的次数.所以:

{ "item": "abc1", "countSmaller": 2, "countBigger": 1}
{ "item": "xyz1", "countSmaller": 1, "countBigger": 0}
Run Code Online (Sandbox Code Playgroud)

使用$ aggregate可以很容易地实现普通计数,但是如何实现上述结果呢?

mongodb nosql mongodb-query aggregation-framework

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

MongoDB - 对象?为什么我需要聚合_id

以下是MongoDB教程中的一个示例(此处为收集邮政编码db:

db.zipcodes.aggregate( [
   { $group: { _id: "$state", totalPop: { $sum: "$pop" } } },
   { $match: { totalPop: { $gte: 10*1000*1000 } } }
] )
Run Code Online (Sandbox Code Playgroud)

如果我_id用其他类似的东西替换Test,我会得到错误信息:

"errmsg" : "exception: the group aggregate field 'Test' must be defined as an expression inside an object",
"code" : 15951,
"ok" : 0
Run Code Online (Sandbox Code Playgroud)

有人能帮我理解为什么_id我的命令需要吗?我认为MongoDB会自动分配ID,如果使用不提供ID.

mongodb aggregation-framework

10
推荐指数
3
解决办法
9751
查看次数

使用$ project阶段中的$ in运算符过滤数组

现在,在$ filter数组聚合运算符中不可能使用$ in运算符.

假设这是文档架构:

{
    _id: 1,
    users: [
        {
            _id: 'a',
            accounts: ['x', 'y', 'z']
        },
        {
            _id: 'b',
            accounts: ['j','k','l']
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我希望,使用aggregate,users根据数组的内容获取带有过滤数组的文档accounts.

如果$in将与合作$filter运营商,我希望它看起来像这样:

db.test.aggregate([
    {
        $project: {
            'filtered_users': {
                $filter: {
                    input: '$users',
                    as: 'user',
                    cond: {
                        $in: ['$$user.accounts', ['x']]
                    }
                }
            }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

和返回的filtered_users只有第一个用户,因为X他的账户.

但是,正如我所说,这不起作用,我得到错误:

"无效的运营商'$ in'"

因为$filter运营商不支持它.

现在我知道我可以$unwind …

mongodb mongodb-query aggregation-framework

10
推荐指数
2
解决办法
6328
查看次数