MongoDB Compass查询:提取指定字段生成扁平结果表
MongoDB Compass 投影嵌套字段生成扁平表
你需要在MongoDB Compass的Project框中使用以下语句,直接指定嵌套的Tasks.http.seconds和Tasks.ftp.seconds字段,同时排除_id并保留Run、Size,就能得到目标结构的结果:
{ "_id": 0, "Run": 1, "Size": 1, "Tasks.http.seconds": 1, "Tasks.ftp.seconds": 1 }
说明
- 用
.符号直接引用嵌套层级的字段,MongoDB会仅保留你指定的这些字段,Compass中展示的结果会是仅包含目标字段的结构 _id:0表示排除默认返回的_id字段,1表示需要保留对应字段
你的示例数据结构
{ "_id": { "$oid": "649f0110adebb5796c3f1af3" }, "Run": "xxxxxxxxxxx", "RunElapsedTime": "3505.477", "RunStartDate": { "$date": "2023-06-30T16:21:36.799Z" }, "RunEndDate": { "$date": "2023-06-30T17:20:02.275Z" }, "Size": "63741958281", "Tasks": { "http": { "seconds": 2282.3470537679996, "bytes": "63741958281", "gb": 59.36432469729334, "command": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" }, "ftp": { "seconds": 1221.1709856480002, "bytes": "63741958281", "gb": 59.36432469729334, "command": "yyyyyyyyyyyyyyyyyyyyyy" } } }
执行上述Project语句后,返回的结果结构如下:
{ "Run": "xxxxxxxxxxx", "Size": "63741958281", "Tasks": { "http": { "seconds": 2282.3470537679996 }, "ftp": { "seconds": 1221.1709856480002 } } }
如果需要完全扁平化(将嵌套的秒数字段提取到顶层),可以使用Compass的聚合功能,添加$project阶段:
{ "$project": { "_id": 0, "Run": 1, "Size": 1, "http_seconds": "$Tasks.http.seconds", "ftp_seconds": "$Tasks.ftp.seconds" } }
返回的完全扁平结果:
{ "Run": "xxxxxxxxxxx", "Size": "63741958281", "http_seconds": 2282.3470537679996, "ftp_seconds": 1221.1709856480002 }
内容的提问来源于stack exchange,提问作者jlo-gmail
相关产品推荐
相关产品推荐

