2011-09-23 3 views
1

NodeJS 0.4.11과 함께 MongoDB 2.0이 설치되어 있고 데이터베이스로 upserts하려고합니다. 나는 다음과 같은 오류를 얻을, 그것은 col.update을 변경할 때MongoDB-Native NodeJS 업데이트가 실패합니다.

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() 잘 작동하지만 :

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){}); 

잘 작동합니다. 그것은 가능성이 보이지만 이것이 문제가 있는지

답변

3

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