0

我有一个文件,其密钥为 IP "10.11.190.14:cgi6web-1": 。当我尝试在 mongoDB 中插入文件时,出现以下错误:

错误:密钥 10.11.190.14:cgi6-web-1 不得包含“.” 在错误(未知来源)。

我没有更改文件的权限,是否有任何解决方法可以使用 IP 作为密钥将文件写入 mongoDB。

我的代码如下:

var MongoClient = require('./lib/mongodb').MongoClient;
var file = require (__dirname + '/functions.json');

MongoClient.connect('mongodb://phx8b03c-fb1d',
    function (err, client) {
        if (err) throw err;

        client.createCollection('lbTopology' , function (err, collection) {
            if (err) throw err;

            collection.insert(file, 'lbTopology' , function (err) {
                if (err) throw err;

                client.close(function (err) {
                    if (err) throw err;

                    console.log('done');
                });
            });
        });
    })

有人可以帮我吗?

4

1 回答 1

3

您可以将文件中的"Pools" 原样更改为Array,移动键,使其成为每个内部的属性Object

{
    "Pools": [
        {
            "_key": "10.2.90.83: cgi5-web-1-80",
            "tags": "dc=PHXodbPool=cgi5-web-1-80",
            "oname": "10.2.90.83: cgi5-web-1-80",
            "pname": "syi-web",
            "oid_suffix": [
                19
            ]
        },
        // ...
    ]
}

您可以使用Object.keys()and.map()来完成此操作:

var file = require (__dirname + '/functions.json');

file.Pools = Object.keys(file.Pools).map(function (key) {
    var pool = file.Pools[key];
    pool._key = key;
    return pool;
});

[编辑]LBs会更有趣,因为每个对象都有一个pnames需要相同处理的对象。此外,由于下面的每个项目pnames都是一个Number,因此您必须创建一个Object来用它的键来保存它。

file.LBs = Object.keys(file.LBs).map(function (key) {
    var lb = file.LBs[key];
    lb._key = key;

    lb.pnames = Object.keys(lb.pnames).map(function (pkey) {
        return { key: pkey, value: lb.pnames[pkey] };
    });

    return lb;
});
于 2013-08-08T06:23:00.013 回答