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