标签: aggregation-framework

如何计算同一MongoDB聚合$ group查询中的多个键?

我有一个问题:

db.test.aggregate( {$group : { _id : '$key', frequency: { $sum : 1 } } } )
Run Code Online (Sandbox Code Playgroud)

这将获得测试集中每个密钥枚举的频率.基本上,我已经得到了密钥的分配.

现在想象一下我想获得key1,key2和key3的分布(因此有三种不同的分布).

显然,我可以使用每个单独的键运行此查询3次,但似乎我们可以通过允许它同时计算所有3个键来优化查询.我一直在玩它并搜索整个网络间,但到目前为止,我已经被委托运行三个单独的聚合查询或使用map/reduce函数.

有没有人有任何其他想法?

mongodb aggregation-framework

9
推荐指数
1
解决办法
7155
查看次数

Node.js - TypeError:无法读取undefined的属性'readPreference'

我尝试在我的Node程序中使用mongodb的聚合方法时出现类型错误.我使用节点0.10.16版本和mongodb mongodb-win32-x86_64-2.4.2版本.

以下是我在mongodb中的'关系'表的详细信息 - `

db.relation.find().的forEach(printjson)

{ "_id" : ObjectId("518808811189128048034c7b") }
{
        "username" : "51880fa37901642c36000001",
        "selectedoption" : "RCB",
        "question" : "Which team is going to win IPL6?",
        "_id" : ObjectId("5188137dee3a599c34000001")
}
{
        "username" : "51880fa37901642c36000001",
        "selectedoption" : "Mumbai",
        "question" : "Which team is going to win IPL6?",
        "_id" : ObjectId("518c2bd0afa8d2e82b000001")
}
{
        "username" : "51880fa37901642c36000001",
        "selectedoption" : "Mumbai",
        "question" : "Which team is going to win IPL6?",
        "_id" : ObjectId("518c2c81681aae0838000001")
}
{
        "username" : "51880fa37901642c36000001",
        "selectedoption" : "RCB",
        "question" : …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js aggregation-framework

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

Mongo聚合框架无法按两个字段排序?

我正在对mongo 2.4.9集合进行一些聚合,但是我无法通过两个字段对结果进行排序.这是我使用PyMongo进行的查询:

result = mongo_coll.aggregate([{"$match": {"_cls": "class1"},
                               {"$group": {"_id": {"currency": "$total.currency",
                                                   "v_id": "$v_id"},
                                           "total": {"$sum": "$total.amount"},
                                           "count": {"$sum": 1}}},
                               {"$sort": {"_id.currency": 1, "total": -1}}])
Run Code Online (Sandbox Code Playgroud)

我的结果按"总计"排序: - 1

如果我用以下内容替换最后一行:

                               {"$sort": {"total": -1, "_id.currency": 1}}])
Run Code Online (Sandbox Code Playgroud)

它仍按"总计"排序: - 1

如果我用以下内容替换它:

                               {"$sort": {"_id.currency": 1}}])
Run Code Online (Sandbox Code Playgroud)

它按货币排序.

但我无法按照我想要的方式对其进行排序,这意味着首先是货币,然后是总数......(其他结果看起来很好,正如预期的那样).有人有线索吗?

最好的,并提前感谢!

更新:这是一个示例文档:

{
  "_id": { "$oid" : "533d0a3b830f783478a75aa1" },
  "_cls": "class1",
  "v_id": 6813,
  "total": {
    "amount": 680,
    "currency": "EUR",
    "exp": -2
  }
}
Run Code Online (Sandbox Code Playgroud)

sorting mongodb pymongo aggregation-framework

8
推荐指数
1
解决办法
3492
查看次数

mongodb聚合项目objectId与concat

db.test.aggregate({
    $match : { "themType" : "SuperTest" , "mType" : { "$in" : [ 1 , 2]}}
}, 
{ $project : { "_id" : 1, "refTestId" : 1, "avatar" : { $concat : [$refTestId] }
  } });
Run Code Online (Sandbox Code Playgroud)

和avatar返回null,可能是因为它的objectId,是否可以在此查询中使用此objectId字符串?

mongodb aggregation-framework

8
推荐指数
1
解决办法
1013
查看次数

Gorang mgo for Mongodb的聚合

有谁知道我们在mongodb shell中为golang mgo/bson使用的聚合命令的等价物是什么?

像这样的东西:

aggregate([{$match:{my_id:ObjectId("543d171c5b2c1242fe0019")}},{$sort:{my_id:1, dateInfo:1, name:1}},{$group:{_id:"$my_id", lastEntry:{$max: "$dateInfo"},nm:{$last:"$name"}}}])
Run Code Online (Sandbox Code Playgroud)

go mongodb aggregation-framework

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

MongoDB Aggregation展开多个数组

这就是我的文档的样子

{
  code: "A2df",
  clicks: 7,
  countries: [{"country":"IN", clicks:5},{"country":"US", clicks:2}],
  domains: [{"domain":"a.com", clicks:4},{"country":"b.com", clicks:3}]
},
{
  code: "B3ws",
  clicks: 11,
  countries: [{"country":"IN", clicks:6},{"country":"ND", clicks:5}],
  domains: [{"domain":"a.com", clicks:7},{"country":"c.com", clicks:4}]
},
{
  code: "A2df",
  clicks: 5,
  countries: [{"country":"IN", clicks:2},{"country":"ND", clicks:3}],
  domains: [{"domain":"a.com", clicks:1},{"country":"c.com", clicks:4}]
}...
Run Code Online (Sandbox Code Playgroud)

这就是我需要的:

{
  code: "A2df",
  clicks: 12,
  countries: [
    {
      "country": "IN",
      clicks: 7
    },
    {
      "country": "US",
      clicks: 2
    },
    {
      "country": "ND",
      clicks: 3
    }
  ],
  domains: [
    {
      "domain": "a.com",
      clicks: 5
    },
    {
      "country": …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

8
推荐指数
1
解决办法
7695
查看次数

如何在MongoDB聚合查询中使用$ hint?

我在ubuntu机器上使用mongo v3.0.1.我收集了3亿行.我已根据查询首选项创建了两个索引.

当我尝试使用explain进行聚合时,它会使用效率低下的索引,这就是为什么它需要花费20-25秒的时间.有没有办法放置$hint,以便我的聚合查询使用适当的索引.

$match是我的第一个管道阶段.我有两个索引:

  1. "HOST_-1_SiteType_-1"

  2. "VisitTime_-1_AccountId_-1_Host_-1_SiteType_-1_Extension_-1_LifeTime_-1"

我的$match管道就像:

{ "$match" : {
    "AccountId": accID, 
    "VisitTime": { "$lte" : today, "$gte" : last365Days },
    "$or": [
        { "$and": [
            { "Extension":{ "$in": ["chrome_0","firefox_0"] }},
            { "LifeTime": 0 }
        ]},
        {  "LifeTime": { "$gt": 1000 }}
    ],
    "Host": { "$ne": "localhost" },
    "SiteType" : { "$exists": true },
}
Run Code Online (Sandbox Code Playgroud)

它使用的是第一个索引,而不是第二个索引.以及第一个指数在50秒内所花费的时间,而使用第二个指数只需要18秒.

这是我的一个文档示例:

{ 
    "_id" : "2bc1143c-07e4-4c37-a020-a7485b2802a3", 
    "CreatedDate" : ISODate("2015-07-22T04:05:06.802+0000"), 
    "UpdatedDate" : ISODate("2015-07-22T05:28:26.469+0000"), 
    "AccountId" : accID, 
    "Url" : "http://www.test.com/test.html", 
    "Host" …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

8
推荐指数
2
解决办法
6720
查看次数

MongoDB将数据连接到一个对象数组中

我在一个名为诊断的集合中有这样的文档:

   {
        "_id" : ObjectId("582d43d18ec3f432f3260682"),
        "patientid" : ObjectId("582aacff3894c3afd7ad4677"),
        "doctorid" : ObjectId("582a80c93894c3afd7ad4675"),
        "medicalcondition" : "high fever, cough, runny nose.",
        "diagnosis" : "Viral Flu",
        "addmissiondate" : "2016-01-12",
        "dischargedate" : "2016-01-16",
        "bhtno" : "125",
        "prescription" : [ 
            {
                "drug" : ObjectId("58345e0e996d340bd8126149"),
                "instructions" : "Take 2 daily, after meals."
            }, 
            {
                "drug" : ObjectId("5836bc0b291918eb42966320"),
                "instructions" : "Take 1 daily, after meals."
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

处方对象数组中的药物 ID来自一个名为drug的单独集合,请参阅下面的示例文档:

{
    "_id" : ObjectId("58345e0e996d340bd8126149"),
    "genericname" : "Paracetamol Tab 500mg",
    "type" : "X",
    "isbrand" …
Run Code Online (Sandbox Code Playgroud)

mongodb nosql mongodb-query aggregation-framework

8
推荐指数
1
解决办法
4125
查看次数

如何在嵌入式数组文档中使用图形查找聚合

这是我的NetworkInfo集合的示例文档。

{
"_id" : ObjectId("5a37595bd2d9ce37f86d612e"),
"edgeList" : [ 
    {
        "networkSource" : {
            "sourceId" : "pump1"
        },
        "networkRelationship" : {},
        "networkTarget" : {
            "targetId" : "chiller1",
            "parentId" : "pump1"
        }
    }, 
    {
        "networkSource" : {
            "sourceId" : "chiller1"
        },
        "networkRelationship" : {},
        "networkTarget" : {
            "targetId" : "secondaryPump1",
            "parentId" : "chiller1"
        }
    }, 
    {
        "networkSource" : {
            "sourceId" : "secondaryPump1"
        },
        "networkRelationship" : {},
        "networkTarget" : {
            "targetId" : "ahu1",
            "parentId" : "secondaryPump1"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

}

我尝试使用以下代码为上述文档创建图形查找:

泵1->冷却器1->次级泵1-> ahu1

db.getCollection("NetworkInfo").aggregate([ …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

8
推荐指数
1
解决办法
577
查看次数

在mongodb中使用单个查询的多个计数

我是Mongo Db的新手,非常感谢您对此查询的一些帮助.在过去的几天里,我一直在筛选这些帖子,撕扯我的头发,看看我是否能找到与我的查询相关但没有运气的任何内容.

我有一个集合,文档结构类似于下面:

_id: xyz
Movieid: 123
MovieName: Titanic
ReleaseDate: 2000-01-01

_id: uvw
Movieid: 456
MovieName: Titanic II
ReleaseDate: 2018-01-01

_id: pqr
Movieid: 789
MovieName: Titanic III
ReleaseDate: 
Run Code Online (Sandbox Code Playgroud)

我希望在3个单独的列中实现输出作为总电影,具有发布日期的电影和没有发布日期的电影的计数,如下所示:

Total   |   Released  |     UnReleased
 3      |       2     |          1
Run Code Online (Sandbox Code Playgroud)

我能够编写单独的查询来执行计数,但我无法将所有这些成功整合到单个查询中.最终目标是创建一个视图,将这些计数作为输出.我已经尝试使用$和等运算符,但似乎无法使查询按预期工作....这是我得到的:

db.getCollection("Movies").aggregate(
    $and: [
{ 
            "$match" : 
                {"ReleaseDate":{$exists:true}}
            }
        , 
        { 
            $count:"Total"
        },
        { 
            "$match" : 
                {"ReleaseDate":{$exists:true,$nin:[""]}}
            }
        , 
        { 
            $count:"Released"
        },

        { 
            "$match" : 
                {"ReleaseDate":{$exists:true,$in:[""]}}
            }
        , 
        { 
            $count:"Unreleased"
        }


    ]
);
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

8
推荐指数
1
解决办法
3799
查看次数