MongoDB和Node.js中的InvalidKey
我有一个文件,其密钥为IPMongoDB和Node.js中的InvalidKey,node.js,mongodb,Node.js,Mongodb,我有一个文件,其密钥为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 + '/func
“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');
});
});
});
})
有人能帮我吗?您可以将
的“池”
更改为数组
,移动键使其成为每个内部对象的属性
:
{
"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
]
},
// ...
]
}
您可以使用和来完成此操作:
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
下的每个项目都是一个数字
,因此您必须创建一个对象
,用它的键保存它
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;
});
您可以将
“Pools”
更改为数组
,移动键使其成为每个内部对象的属性
:
{
"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
]
},
// ...
]
}
您可以使用和来完成此操作:
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
下的每个项目都是一个数字
,因此您必须创建一个对象
,用它的键保存它
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;
});
在尝试插入之前,请将文件密钥中的“.”替换为“u”?如何操作?jsp不是很好。它们可以在文件中从键更改为值吗?与其说是
{10.11.190.14:cgi6web-1:…}
,不如说是{“key:”10.11.190.14:cgi6web-1“,…}
?这可能会使以后的查询更简单:collection.find({key:'10.11.190.14:cgi6web-1'},})
。我没有编辑文件的权限,但只需读取并将其写入Mongodbc。您能在这里发布json文件吗?您可以编辑敏感字段,但我们需要该结构来了解如何在插入到MongoDB之前转换json文件。在尝试插入之前,将文件键中的“.”替换为“u”?我该怎么做?jsp不是很好。它们可以在文件中从键更改为值吗?与其说是{10.11.190.14:cgi6web-1:…}
,不如说是{“key:”10.11.190.14:cgi6web-1“,…}
?这可能会使以后的查询更简单:collection.find({key:'10.11.190.14:cgi6web-1'},})
。我没有编辑文件的权限,但只需读取并将其写入Mongodbc。您能在这里发布json文件吗?您可以编辑敏感字段,但我们需要结构来了解如何在插入MongoDB之前转换json文件。谢谢Jonathan。因此,与其使用collection.insert(文件'lbTopology',函数(err){if(err)throw err;我需要使用collection.insert(池,'lbTopology',函数(err){if(err)throw err;??@user2325703这应该允许您仍然.insert(文件,…)
。在这之前,它只是更改了池的属性,这样Mongo会更容易接受它。@JonathanLonowski在保存、索引等过程中不会产生一些开销吗?@S.D.嗯,我肯定会有一些。我对分析Mongo的知识还不够,无法真正回答。不过,我不认为这会造成比尝试更多的开销ted使用原始对象。@Jonathan.itwork.。非常感谢。我还有一个JSON文件。“LBs”:{“10.11.190.14”:{“tags”:“lbtype=netscaler shared primary host=sjclb99-map00.sjc.com”,“oname”:“10.11.190.14”,“pnames”:{“10.11.190.14:cgi6-web-1”:1,“10.11.190.14:icgi6-web-1”:1},因为pnames也有Key,value。我尝试了这个函数file.LBs.pnames=Object.keys(file.LBs.pnames).map(函数(Key){var lbPname=file.LBs.pnames[Key];lbPname.\u Key=Key;return lbPname;});但是dint工作感谢Jonathan。因此,不使用collection.insert(文件'lbTopology',函数(err){if(err)throw err;我需要使用collection.insert(池'lbTopology',函数(err){if(err)抛出err;??@user2325703这应该允许您仍然.insert(文件,…)
。在这之前,它只是更改了池的属性,这样Mongo会更容易接受它。@JonathanLonowski在保存、索引等过程中不会产生一些开销吗?@S.D.嗯,我肯定会有一些。我对分析Mongo的知识还不够,无法真正回答。不过,我不认为这会造成比尝试更多的开销ted使用原始对象。@Jonathan.itwork.。非常感谢。我还有一个JSON文件。“LBs”:{“10.11.190.14”:{“tags”:“lbtype=netscaler shared primary host=sjclb99-map00.sjc.com”,“oname”:“10.11.190.14”,“pnames”:{“10.11.190.14:cgi6-web-1”:1,“10.11.190.14:icgi6-web-1”:1},因为pnames也有Key,value。我尝试了这个函数file.LBs.pnames=Object.keys(file.LBs.pnames).map(函数(Key){var lbPname=file.LBs.pnames[Key];lbPname.\u Key=Key;return lbPname;});但是这个函数不起作用