V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
neargle
V2EX  ›  MongoDB

mongodb 如何获取 Collection 数据中所包含的内部字典的所有 key 值?

  •  
  •   neargle · 2017-07-11 14:08:38 +08:00 · 9079 次点击
    这是一个创建于 2693 天前的主题,其中的信息可能已经有所发展或是发生改变。

    mongodb 如何获取 Collection 数据中所包含的内部字典的所有 key 值?

    我有一批要处理的数据类似:

    /* 1 */
    {
    	...
        "data" : [ 
            {
                "status" : "OK",
                "name" : "Administrator",
                "description" : "管理计算机(域)的内置帐户"
            }
        ],
        "uptime" : ISODate("2017-06-29T06:42:40.934Z")
    }
    
    /* 2 */
    {
    	...
        "data" : [ 
            {
                "address" : "0.0.0.0:135",
                "pid" : "920",
                "proto" : "TCP"
            }, 
            {
                "pid" : "4",
                "proto" : "TCP",
                "address" : "0.0.0.0:445"
            }
        ],
        "uptime" : ISODate("2017-07-11T02:48:54.271Z")
    }
    

    如上所示,每个 data 内是一个字典的列表,字典内的 key 有可能不尽相同。我想把 data 内部的所有 key 值取出来,生成这样的 list:

    ["pid", "proto", "address", "status", "name"...]
    

    思考想用 map-reduce 实现:

    mr = db.runCommand({
      "mapreduce" : "info",
      "map" : function() {
        for (var item in this.data) {
        	for (var key in item){
        		emit(key, null);
                }
     	}
      },
      "reduce" : function(key, stuff) { return null; }, 
      "out": "keys"
    })
    db[mr.result].find()
    

    但是出来的数据并非我想要的数据。看了好久的 map-reduce 文档,都没改好。对 mongodb 实在不熟,特来求教。

    1 条回复    2017-09-24 20:58:06 +08:00
    hawkflying
        1
    hawkflying  
       2017-09-24 20:58:06 +08:00
    转自: https://stackoverflow.com/questions/2298870/mongodb-get-names-of-all-keys-in-collection

    亲测:

    mr = db.runCommand({
    "mapreduce" : "my_collection",
    "map" : function() {
    for (var key in this) { emit(key, null); }
    },
    "reduce" : function(key, stuff) { return null; },
    "out": "my_collection" + "_keys"
    })
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2767 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:39 · PVG 19:39 · LAX 03:39 · JFK 06:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.