【问题标题】:grouped count with a column and index position mongodb带有列和索引位置的分组计数 mongodb
【发布时间】:2016-09-30 05:17:05
【问题描述】:

这是我在一个 mongodb 集合中拥有的文档的结构。 我想了解如何对键“代码”和嵌套 json 中的索引位置进行分组计数的 mongo 聚合(不是优先级,因为它可以是任何数字,但在嵌套的时间表内只能有 5 个值):

{                                                                                                                                  
        "_id" : ObjectId("5749e9fde4b0064e7362b560"),                                                                              
        "_class" : "com.weirdcompanyname.core.collectionname",                                                            
        "rfId" : 1,                                                                                                                
        "scheduleds" : [                                                                                                        
                {                                                                                                                  
                        "code" : "556e4835f1eae40bdfa2f2001f2afc76",                                                               
                        "type" : "HT",                                                                                             
                        "priority" : 0                                                                                             
                },                                                                                                                 
                {                                                                                                                  
                        "code" : "8b2ab67af4f60e42f7ea64813b5795cf",                                                               
                        "type" : "HT",                                                                                             
                        "priority" : 1                                                                                             
                },                                                                                                                 
                {                                                                                                                  
                        "code" : "ed17101eb918b4d8c7c598e4884523ea",                                                               
                        "type" : "HT",                                                                                             
                        "priority" : 2                                                                                             
                },                                                                                                                 
                {                                                                                                                  
                        "code" : "7e0ffb4db",                                                                                      
                        "type" : "QZ",                                                                                             
                        "priority" : 3                                                                                             
                },                                                                                                                 
                {                                                                                                                  
                        "code" : "1453dfa1794f39b05f0259ad04699073",                                                               
                        "type" : "HT",                                                                                             
                        "priority" : 4                                                                                             
                }                                                                                                                  
        ],                                                                                                                         
        "created" : ISODate("2016-05-28T18:57:00.878Z")                                                                            
}

我试图找到的结果是:

code    index_position  count
556e4835f1eae40bdfa2f2001f2afc76    0   100
8b2ab67af4f60e42f7ea64813b5795cf    1   100
ed17101eb918b4d8c7c598e4884523ea    2   100
7e0ffb4db   3   100
1453dfa1794f39b05f0259ad04699073    4   100

我可以考虑展开单个数组中的嵌套 json,然后将代码分组到代码和其他列上,比如说优先级并有计数,但问题是获取索引位置。

这在 mongo 上是否可行,我已经阅读了很多关于它的内容,我认为如果我有需要一个职位的价值,那么它是可行的,但我真的没有价值因为,我正在寻找的是每个代码及其在“计划”和计数中的索引位置。 这就是我可以用我有限的 mongo 查询技能做的事情:

db.collectionname.aggregate([{'$match':{'date_key':{'$gte': yesterday_beginning, '$lte': yesterday_end}}}, {'$unwind':'$scheduleds'}, {'$group':{'_id':{'code':'$scheduleds.code','priority':'$scheduleds.priority'}, 'rfid':{'$addToSet':'$rfId'}}}, {'$project':{'_id':0, 'code':'$_id.code', 'priority':'$_id.priority', 'totalRfid':{'$size':'$rfid'}}}, { $limit : 1000 }],{ allowDiskUse:true})

【问题讨论】:

    标签: json mongodb mongodb-query pymongo


    【解决方案1】:

    Alain1405says here MongoDB 3.2 支持展开数组索引。

    您可以传递 $unwind 运算符,而不是传递路径 具有字段路径和字段includeArrayIndex 的对象 将保存数组索引。

    来自MongoDB official documentation

    {
      $unwind:
      {
        path: <field path>,
        includeArrayIndex: <string>,
        preserveNullAndEmptyArrays: <boolean>
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 2012-08-11
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2014-07-26
      相关资源
      最近更新 更多