2016-01-22 23 views
0

我最近升级到5.4的节点和MongoDB 2.1.4驱动程序的节点,我有以下问题:节点/ MongoDB的JSON空数组错误

我有一个包含这样的事情叫做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": [] 
    } 
} 

现在,我想这个文件插入到数据库蒙哥:

let buildings = require("buildings"); 
... 
collection.insertOne({ foo: buildings }, callback); 

如果第一"targetEnvironment"数组是空的,什么都没有插入,回调不是C alled,并没有错误。但如果它被填充,一切都很好,回调被称为和文档被正确插入... 我必须承认,我不知道如果问题是与Node或MongoDb驱动程序有关...

有人能帮助我吗 ?

+0

在升级之前,是否也做了同样的插入工作? – metame

+0

是的,我使用了Nodejs v0.12和MongoDb Driver v1.4。 – Paradox

+0

你可以记录错误或打开你的'mongod'的调试日志吗? – metame

回答

0

哦...因为我有一个64位的Windows,我安装了64位nodejs版本,问题来自于这里... 32位,没有错误! :o

0
#!/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属性是一个浮点数。如果它像时间戳那样大,它也会失败。

+0

哦,你是说你插入一个浮动数字会失败吗?这绝对不应该发生。绝对看起来像一个可能的错误。 – metame

+0

围绕它的一种方法是在插入之前将你的浮动转换为字符串,然后在检索时将它们重新转换为数字/浮动(如果你必须对它们做些什么) – metame

+0

是的,这是问题所在。 我有很多代码使用时间戳和浮点数与数据库,我不想重写10.000行...... :( – Paradox