将JavaScript文件中的对象插入mongo

时间:2016-02-17 17:48:57

标签: javascript json node.js mongodb

我有一个我在JavaScript文件中创建的对象,基本上就是这样。

{ name1:
     {'category 1'  : {'stat1': 1, 'stat 2': 1},
      'category 2'  : {'stat1': 1, 'stat 2': 1}},
  name2...}

我想在mongo中将此对象插入我的数据库。我得到的错误是

Error: invalid schema, expected mongodb

在我的代码中指向此行。

MongoClient.connect(url, function (err, db){
    if (err)...
    else{
        var collection = db.collection("mydb");
        //this function is giving an error
        collection.insert(myObj, function(err, result) {
        if(err){console.log(err);}
        else...

我怀疑这可能是因为我的对象是mongo处理的格式不兼容,在这种情况下我的问题是如何将其转换为可用的格式?

2 个答案:

答案 0 :(得分:0)

如果你转到jsonlint.com

你会发现你的对象不是有效的JSON对象。

要创建有效的JSON对象,您可以执行以下操作:

var myObj = {};
myObj.name1 = {};
myObj.name1.category1 = {};
myObj.name1.category1.stat1 = 1;
myObj.name1.category1.stat2 = 1;
myObj.name1.category2 = {};
myObj.name1.category2.stat1 = 1;
myObj.name1.category2.stat2 = 1;

理想情况下,name1对象应该是一个数组,然后应该包含category1& category2对象作为数组的元素。此外,myObj也应该是一个数组,然后应该包含name1和name2对象作为元素。然后你可以使用MongoDB的insertMany函数来插入数组。

所以说你有数组:

var myObjs = [];
var obj1 = {};
obj1.name1 = {};
obj1.name1.category1 = {};
obj1.name1.category1.stat1 = 1;
obj1.name1.category1.stat2 = 1;
obj1.name1.category2 = {};
obj1.name1.category2.stat1 = 1;
obj1.name1.category2.stat2 = 1;
myObjs.push(obj1);
collection.insertMany(myObjs, function(err, result){
    if(err) console.log(err);
    else console.log('Documents inserted successfully');
});

在插入之前,请务必确保您的对象是有效的JSON对象。

答案 1 :(得分:-2)

你应该使用insertOne而不是insert https://docs.mongodb.org/getting-started/node/insert/