Node/MongoDb JSON 空数组错误
Node/MongoDb JSON empty array bug
我最近升级到 Node 5.4 和 MongoDb 2.1.4 Node 驱动程序,我遇到以下问题:
我有一个名为 buildings.json 的文件,其中包含如下内容:
{
"military_base": {
"type": "military",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": [],
"timeUntilBuilt": 0,
"costCoef": 0.4,
"requiredResearches": [
"foo#4",
"bar#1"
],
"requiredResources": [
"cash",
"metal",
"palladium"
],
"inProgress": 0,
"queue": []
},
"aqua_center": {
"type": "industrial",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": [
"ocean",
"snowy"
],
"timeUntilBuilt": 0,
"costCoef": 0.7,
"requiredResearches": [
"lorem#10",
"ipsum#3"
],
"requiredResources": [
"cash",
"cristal"
],
"inProgress": 0,
"queue": []
}
}
现在,我想将此文档插入 mongo 数据库:
let buildings = require( "buildings" );
...
collection.insertOne( { foo: buildings }, callback );
如果第一个"targetEnvironment"
数组为空,则不插入任何内容,不调用回调,也没有错误。但如果它被填满,一切都很好,回调被调用并且文档被正确插入......
我必须承认,我不知道问题是与节点有关还是与 MongoDb 驱动程序有关...
有人可以帮助我吗?
#!/usr/bin/env node
const mongodb = require( "mongodb" );
const MongoClient = mongodb.MongoClient;
const ObjectID = mongodb.ObjectID;
MongoClient.connect( "mongodb://127.0.0.1:27017/test", function( err, db ) {
if ( err ) {
throw err;
}
var collection = db.collection( "test-insert" );
collection.insertOne( test, ( err, obj ) => {
if ( err ) {
throw err;
}
console.log( obj.insertedId );
db.close();
} );
} );
var test = {
"military_base": {
"type": "military",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": [],
"timeUntilBuilt": 0,
"costCoef": 0.4,
"requiredResearches": ["foo#4", "bar#1"],
"requiredResources" : ["cash", "metal", "palladium"],
"inProgress": 0,
"queue": []
},
"aqua_center": {
"type": "industrial",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": ["ocean", "snowy"],
"timeUntilBuilt": 0,
"costCoef": 7,
"requiredResearches": ["lorem#10", "ipsum#3"],
"requiredResources" : ["cash", "cristal"],
"inProgress": 0,
"queue": []
}
};
如果我尝试插入这个文档,它不会被插入,因为第一个costCoef 属性 是一个浮点数。如果它是一个很大的数字,比如时间戳,它也会失败。
哦...因为我有64位Windows,我安装了64位的nodejs版本,问题就出在这里...32位的,没有错误! :o
我最近升级到 Node 5.4 和 MongoDb 2.1.4 Node 驱动程序,我遇到以下问题:
我有一个名为 buildings.json 的文件,其中包含如下内容:
{
"military_base": {
"type": "military",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": [],
"timeUntilBuilt": 0,
"costCoef": 0.4,
"requiredResearches": [
"foo#4",
"bar#1"
],
"requiredResources": [
"cash",
"metal",
"palladium"
],
"inProgress": 0,
"queue": []
},
"aqua_center": {
"type": "industrial",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": [
"ocean",
"snowy"
],
"timeUntilBuilt": 0,
"costCoef": 0.7,
"requiredResearches": [
"lorem#10",
"ipsum#3"
],
"requiredResources": [
"cash",
"cristal"
],
"inProgress": 0,
"queue": []
}
}
现在,我想将此文档插入 mongo 数据库:
let buildings = require( "buildings" );
...
collection.insertOne( { foo: buildings }, callback );
如果第一个"targetEnvironment"
数组为空,则不插入任何内容,不调用回调,也没有错误。但如果它被填满,一切都很好,回调被调用并且文档被正确插入......
我必须承认,我不知道问题是与节点有关还是与 MongoDb 驱动程序有关...
有人可以帮助我吗?
#!/usr/bin/env node
const mongodb = require( "mongodb" );
const MongoClient = mongodb.MongoClient;
const ObjectID = mongodb.ObjectID;
MongoClient.connect( "mongodb://127.0.0.1:27017/test", function( err, db ) {
if ( err ) {
throw err;
}
var collection = db.collection( "test-insert" );
collection.insertOne( test, ( err, obj ) => {
if ( err ) {
throw err;
}
console.log( obj.insertedId );
db.close();
} );
} );
var test = {
"military_base": {
"type": "military",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": [],
"timeUntilBuilt": 0,
"costCoef": 0.4,
"requiredResearches": ["foo#4", "bar#1"],
"requiredResources" : ["cash", "metal", "palladium"],
"inProgress": 0,
"queue": []
},
"aqua_center": {
"type": "industrial",
"level": 0,
"maxLevel": 25,
"upgrade": true,
"targetEnvironment": ["ocean", "snowy"],
"timeUntilBuilt": 0,
"costCoef": 7,
"requiredResearches": ["lorem#10", "ipsum#3"],
"requiredResources" : ["cash", "cristal"],
"inProgress": 0,
"queue": []
}
};
如果我尝试插入这个文档,它不会被插入,因为第一个costCoef 属性 是一个浮点数。如果它是一个很大的数字,比如时间戳,它也会失败。
哦...因为我有64位Windows,我安装了64位的nodejs版本,问题就出在这里...32位的,没有错误! :o