Ошибка обновления MongoDB-Native NodeJS - PullRequest
1 голос
/ 23 сентября 2011

У меня установлена ​​MongoDB 2.0 вместе с NodeJS 0.4.11, и я пытаюсь сделать upserts в базу данных.Вот код:

var mongo = require('mongodb');
var db = new mongo.Db('db', new mongo.Server('localhost', 27017, {}), {});

var updatecmd = JSON.parse(JSON.stringify("{ id : " + jsonObj.VisitorID + "}"));
console.log(updatecmd);
var insertObject = JSON.parse(JSON.stringify(temp));
col.update(updatecmd, insertObject, {upsert:true}, function(err, r){console.log(err.stack); console.log(r);});

col.save () работает просто отлично, но когда я изменяю его на col.update, я получаю следующую ошибку:

TypeError: Object.keys called on non-object
    at Function.keys (native)
    at Function.calculateObjectSize (/home/admin/node_modules/mongodb/lib/mongodb/bson/bson.js:76:34)
    at [object Object].toBinary (/home/admin/node_modules/mongodb/lib/mongodb/commands/update_command.js:43:112)
    at [object Object].send (/home/admin/node_modules/mongodb/lib/mongodb/connection.js:257:32)
    at [object Object].executeCommand (/home/admin/node_modules/mongodb/lib/mongodb/db.js:746:18)
    at Collection.update (/home/admin/node_modules/mongodb/lib/mongodb/collection.js:421:26)
    at addtoobject (/home/admin/mongoscript.js:127:9)
    at /home/admin/mongoscript.js:103:4
    at EventEmitter.<anonymous> (/home/admin/node_modules/lazy/lazy.js:62:13)
    at EventEmitter.<anonymous> (/home/admin/node_modules/lazy/lazy.js:46:19)

Я получаю этоошибка для каждой части контента.Когда я делаю

col.save(insertObject, function(err,r){});

Это работает просто отлично.

1 Ответ

3 голосов
/ 23 сентября 2011

Не уверен на 100%, если это проблема, хотя это выглядит вероятным:

var updatecmd = JSON.parse(JSON.stringify("{ id : " + jsonObj.VisitorID + "}"));

Это выведет строку, а не объект. Отбросьте вызов до stringify, или, что еще лучше, просто постройте объект.

например:.

var ID = 123,
    oldupdatecmd = JSON.parse(JSON.stringify("{ id : " + ID + "}")), // "{id : 123}"
    newupdatecmd = { id : ID }; // {id : 123}   <--  An Object, not a string

Почти уверен, что первый параметр должен быть объектом, и вот как выглядит ошибка: Object.keys called on non-object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...