2016-04-22 330 views
2

这是我的示例文本模式MongoDB查询嵌套文档mongoDB

我想检索每个用户的数据。我也想要_id,因为在一个完整的文档中它有几个具有类似结构的_id。

我尝试使用开卷操作,因为对象包含嵌套数组是这样的:

db.getCollection('topic_stats_2').aggregate([{ $unwind : "$usages.type.users.text" }, { $unwind : "$usages.type.users.stats.xyz1" }, { $unwind : "$usages.type.users.stats.xyz2" }, { $unwind : "$usages.type.users.stats.xyz3" }, { $unwind : "$usages.type.users.xyz4" }, { $unwind : "$usages.type.users.xyz5" }]) 

但它提供了零次的结果。

我想要这样的表格格式的结果。我知道表中将包含大量冗余数据。但这是我想要的。

_id | count | xyz4 | xyz5 | xyz1 | xyz2 | xyz3 | text | type | 
    |  |  |  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  | 



/* 1 */ 
{ 
    "_id" : “photo", 
    "count" : 236, 
    "usages" : [ 
     { 
      "type" : 1, 
      "users" : [ 
       { 
        "text" : “jkncfkjfdn", 
        "stats" : { 
         “xyz1" : 6, 
         “xyz2" : 1, 
         “xyz3" : 1194 
        }, 
        “xyz4" : "julius babao", 
        “xyz5" : "juLiusbabao" 
       }, 
       { 
        "text" : “fcnf", 
        "stats" : { 
         “xyz1" : 9, 
         “xyz2" : 6, 
         “xyz3" : 1199 
        }, 
        “xyz4" : "Dman", 
        “xyz5" : "DmanTheDesigner" 
       }, 
       { 
        "text" : “dckejsndc", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 0, 
         “xyz3" : 1200 
        }, 
        “xyz4" : "EastmanHouse", 
        “xyz5" : "EastmanHouse" 
       } 
      ] 
     }, 
     { 
      "type" : 2, 
      "users" : [ 
       { 
        "text" : “msdnc", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 1, 
         “xyz3" : 1168 
        }, 
        “xyz4" : "Shayne", 
        “xyz5" : "RKTay" 
       }, 
       { 
        "text" : “kfjnvfv", 
        "stats" : { 
         “xyz1" : 0, 
         “xyz2" : 0, 
         “xyz3" : 523 
        }, 
        “xyz4" : "andy stitches", 
        “xyz5" : "myproudmendes" 
       }, 
       { 
        "text" : “jkopoiuyt", 
        "stats" : null, 
        “xyz4" : "jm", 
        “xyz5" : "jihannelayosa" 
       } 
      ] 
     }, 
     { 
      "type" : 3, 
      "users" : [ 
       { 
        "text" : “opted", 
        "stats" : { 
         “xyz1" : 58, 
         “xyz2" : 32, 
         “xyz3" : 1192 
        }, 
        “xyz4" : "♪♫Lil Darryl♫♪", 
        “xyz5" : "LilDarryl301" 
       }, 
       { 
        "text" : "Cloud 9", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 1, 
         “xyz3" : 1171 
        }, 
        “xyz4" : "FGN", 
        “xyz5" : "pretty_brown66" 
       }, 
       { 
        "text" : "Cloud 9", 
        "stats" : { 
         “xyz1" : 0, 
         “xyz2" : 0, 
         “xyz3" : 997 
        }, 
        “xyz4" : "Travis Porter Jr .", 
        “xyz5" : "AyoTravo" 
       } 
      ] 
     }, 
     { 
      "type" : 4, 
      "users" : [ 
       { 
        "text" : “while", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 1, 
         “xyz3" : 1200 
        }, 
        “xyz4" : "LEGO Darth Vader", 
        “xyz5" : "LegoDarthVader" 
       }, 
       { 
        "text" : “xjw", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 1, 
         “xyz3" : 1198 
        }, 
        “xyz4" : "The Brothers Brick", 
        “xyz5" : "BrothersBrick" 
       }, 
       { 
        "text" : “pol", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 1, 
         “xyz3" : 1197 
        }, 
        “xyz4" : "BYTES & BRICKS", 
        “xyz5" : "lego_bb" 
       } 
      ] 
     }, 
     { 
      "type" : 5, 
      "users" : [ 
       { 
        "text" : “qtwqyw", 
        "stats" : { 
         “xyz1" : 1, 
         “xyz2" : 1, 
         “xyz3" : 1155 
        }, 
        “xyz4" : "Kell_1976", 
        “xyz5" : "LuvsMyMunchkie" 
       }, 
       { 
        "text" : “ytyty", 
        "stats" : { 
         “xyz1" : 12, 
         “xyz2" : 4, 
         “xyz3" : 1200 
        }, 
        “xyz4" : "carriewildes", 
        “xyz5" : "carriewildes" 
       }, 
       { 
        "text" : "from the high.", 
        "stats" : { 
         “xyz1" : 0, 
         “xyz2" : 0, 
         “xyz3" : 1067 
        }, 
        “xyz4" : "jake☄", 
        “xyz5" : "w0rshiptheking" 
       } 
      ] 
     } 
    ] 
} 

有人可以帮我在这个查询吗?

+0

从快看看你的$退绕看起来可疑:他们不是在阵列领域。 – joao

+0

@joao:你能告诉我如何放松吗?或者更正查询 – x0v

回答

1

您应用$unwind运算符的方式是错误的,因为它只对数组字段起作用,并且您正在将其应用于非数组字段。您可以运行在聚集管道进行非规范化的阵列领域并获得所需的结构:

db.getCollection('topic_stats_2').aggregate([ 
    { "$unwind": "$usages" }, 
    { "$unwind": "$usages.users" }, 
    { 
     "$project": { 
      "count": 1, 
      "xyz4": "$usages.users.xyz4", 
      "xyz5": "$usages.users.xyz5", 
      "xyz1": "$usages.users.stats.xyz1", 
      "xyz2": "$usages.users.stats.xyz2", 
      "xyz3": "$usages.users.stats.xyz3", 
      "text": "$usages.users.text", 
      "type": "$usages.type" 
     } 
    } 
]) 
+1

非常感谢。我认为unwind也可以应用于数组的属性。现在我懂了 – x0v