标签: aggregation-framework

Mongo聚合框架,排序然后组不工作

我首先尝试按日期排序数据,然后在另一个字段上分组.这对我不起作用.

我想回答的问题是:选择最新的不同cid?

鉴于此数据:

db.summary.save({"lid" : 5, "date" : 5, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 2, "date" : 2, "cid" : 1, "circles" : [ 2 ] })
db.summary.save({"lid" : 4, "date" : 0, "cid" : 3, "circles" : [ 2 ] })
db.summary.save({"lid" : 3, "date" : 3, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 1, "date" : 1, "cid" : 1, "circles" : [ 2 ] })

db.summary.aggregate( {$match …
Run Code Online (Sandbox Code Playgroud)

sorting mongodb aggregation-framework

12
推荐指数
1
解决办法
6737
查看次数

在mongoose聚合框架中按日期排序

我正在使用mongoose在nodejs + mongodb项目上工作.现在我遇到了一个我不知道答案的问题.我正在使用聚合框架来获得分组结果.分组在不包括时间数据字段的日期完成,如:"2013 02 06".代码如下所示:

MyModel.aggregate([
            {$match: {$and: [{created_date: {$gte: start_date}}, {created_date: {$lte: end_date}}]}},
            {$group: {
                _id: {
                    year: {$year: "$created_at"},
                    month: {$month: "$created_at"},
                    day: {$dayOfMonth: "$created_at"}
                },
                count: {$sum: 1}
            }},
            {$project: {
                date: {
                        year: "$_id.year",
                        month:"$_id.month",
                        day:"$_id.day"
                },
                count: 1,
                _id: 0
            }}
        ], callback);
Run Code Online (Sandbox Code Playgroud)

分组结果是完美的,除了它们没有排序.以下是输出示例:

[
    {
        count: 1,
        date: {
            year: 2013,
            month: 2,
            day: 7
        }
    },
    {
        count: 1906,
        date: {
            year: 2013,
            month: 2,
            day: 4
        }
    },
    {
        count: 1580,
        date: …
Run Code Online (Sandbox Code Playgroud)

sorting mongoose aggregation-framework

12
推荐指数
2
解决办法
5308
查看次数

如何使用聚合框架计算MongoDB中的布尔值

文档存储有以下字段:

_id:
NumberofChildren: Integer
OwnsAHome: Boolean
Income: Integer
Run Code Online (Sandbox Code Playgroud)

我需要使用聚合框架按子节点数排序,所以输出是这样的:

Number of Children: 3
Number of People: some value, say 17
Number of People who own a home: some value less than 17 which is a sum of the number of true Booleans
Average income: some value
Run Code Online (Sandbox Code Playgroud)

我会怎么做这与聚集的MongoDB,特别是关于计数的次数多少Boolean OwnsAHome,是true

谢谢!

mongodb aggregation-framework

12
推荐指数
2
解决办法
5446
查看次数

MongoDb聚合按日期分组

我正在尝试按时间戳分组名为"foo"的集合{_id,TimeStamp}

db.foos.aggregate(
[
   {$group : { _id : new Date (Date.UTC({ $year : '$TimeStamp' },{ $month : '$TimeStamp' },{$dayOfMonth : '$TimeStamp'}))       }}
])
Run Code Online (Sandbox Code Playgroud)

期待许多日期,但结果只是一个日期.我正在使用的数据是正确的(除了1970年以外有很多foo和不同的日期).解析日期有一些问题,但我还无法解决.

{
    "result" : [ 
        {
            "_id" : ISODate("1970-01-01T00:00:00.000Z")
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

试过这一个:

db.foos.aggregate(
[
   {$group : { _id : { year : { $year : '$TimeStamp' }, month : { $month : '$TimeStamp' }, day : {$dayOfMonth : '$TimeStamp'} }, count : { $sum : 1 }       }},
   {$project : { parsedDate : …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

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

12
推荐指数
1
解决办法
7012
查看次数

如何使用mongodb聚合并检索整个文档

我对mongodb的聚合函数感到困惑.我想要的就是在我的收藏中找到最新的文档.假设每个记录都有一个"已创建"的字段

db.collection.aggregate({
    $group: { 
        _id:0,
        'id':{$first:"$_id"},
        'max':{$max:"$created"}
    }
})
Run Code Online (Sandbox Code Playgroud)

产生正确的结果,但我希望结果中的整个文档?我该怎么办?

这是文档的结构:

{
    "_id" : ObjectId("52310da847cf343c8c000093"),
    "created" : 1389073358,
    "image" : ObjectId("52cb93dd47cf348786d63af2"),
    "images" : [
        ObjectId("52cb93dd47cf348786d63af2"),
        ObjectId("52f67c8447cf343509d63af2")
        ],
    "organization" : ObjectId("522949d347cf3402c3000001"),
    "published" : 1392601521,
    "status" : "PUBLISHED",
    "tags" : [ ],
    "updated" : 1392601521,
    "user_id" : ObjectId("52214ce847cf344902000000")
}
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

12
推荐指数
2
解决办法
8987
查看次数

Mongo db聚合多个条件

我想投影一个集合,仅当字段在范围内时才应用导出值.

有点:

db.workouts.aggregate({
 $match: { user_id: ObjectId(".....") }
},
{
 $project: { 
        '20': { $cond: [ {$gt: [ "$avg_intensity", 20]} , '$total_volume', 0] }
    }    
 })
Run Code Online (Sandbox Code Playgroud)

只有当avg_intensity在某个范围内时我才需要获取值.然后,我将对投影结果进行分组和总结.

我想要做的是应用$ gt和$ lt过滤器,但没有太大的成功.

db.workouts.aggregate(
{
   $match: { user_id: ObjectId("....") }
},
{
$project: { 
        '20': { $cond: [ [{$gt: [ "$avg_intensity", 20]}, {$lt: [ "$avg_intensity", 25]}] ,    '$total_volume', 0] }
    }    
 })
Run Code Online (Sandbox Code Playgroud)

我如何应用$ gt和$ lt条件?

mongodb mongodb-query aggregation-framework

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

MongoDB allowDiskUse不工作..

专家们.

我是MongoDB的新手,但我知道自己遇到了麻烦......例如:

db.test.aggregate(
[
    {$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}}, 
    {$group: {_id: "$_id.email", cnt: {$sum: 1}}}, 
    {$match: {cnt: 2}}
], 
    {allowDiskUse : true}
)
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么变化,我都会遇到同样的错误("Pass allowDiskUse:true to opt in"):

错误("打印堆栈跟踪")@:0()@src/mongo/shell/utils.js:37([对象数组],[对象对象])@src/mongo/shell/collection.js:866 @(壳):7

未捕获的异常:聚合失败:{"errmsg":"异常:来自mongo1.mscnet.com:27017的响应中收到错误:{$ err:\"超出$ group的内存限制,但不允许外部排序.传递allowDiskUse:true以选择加入. \",代码:16945}","code":16945,"ok":0}

仅供参考:我使用的是Mongo 2.6

mapreduce mongodb aggregation-framework

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

MongoDB聚合项目字符串到ObjectId

我试图将十六进制字符串转换为聚合查询中的等效ObjectID.我尝试了两种不同的方法:

db.omvas.aggregate([
    {$project:{
        EID:{$let: {
               vars: {
                  id:  "$EID"
               },
               in: ObjectId("$$id")
            }},
        }
    },
    {$group:{
        _id:"$EID"
        }
    }
]);
Run Code Online (Sandbox Code Playgroud)

db.omvas.aggregate([
    {$project:{
        EID: ObjectId("$EID")
        }
    },
    {$group:{
        _id:"$EID"
        }
    }
]);
Run Code Online (Sandbox Code Playgroud)

我继续使用任一方法获得错误"错误:无效对象id:长度".我测试了添加一个文字字符串来代替聚合变量,我得到一个带有正确ObjectID的结果.似乎字符串值没有传递给Mongo的ObjectId函数,而是将变量名称作为文字字符串传递.

任何人都知道我想要完成的任务是否可行?我有什么魔法吗?

mongodb aggregation-framework

12
推荐指数
2
解决办法
7877
查看次数

在2个不同的字段中搜索值mongodb + node.js

我是新手.但我尝试学习编写查询的最合理方法.

假设我收集的是;

{ 
    "id" : NumberInt(1), 
    "school" : [
        {
            "name" : "george", 
            "code" : "01"
        }, 
        {
            "name" : "michelangelo", 
            "code" : "01"
        }
    ], 
    "enrolledStudents" : [
        {
            "userName" : "elisabeth", 
            "code" : NumberInt(21)
        }
    ]
}
{ 
    "id" : NumberInt(2), 
    "school" : [
        {
            "name" : "leonarda da vinci", 
            "code" : "01"
        }
    ], 
    "enrolledStudents" : [
        {
            "userName" : "michelangelo", 
            "code" : NumberInt(25)
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想列出一个key带有相应code值的a的出现.

举个例子key:michelangelo

为了找到密钥的出现,我写了两个不同的 …

mongodb node.js mongodb-query aggregation-framework

12
推荐指数
1
解决办法
693
查看次数