2012-08-16 4 views
8

임은 간단한 업데이트를하려고 노력유성 수집 업데이트는

Collection.update(id, {$set:{name:value}}); 

또는

Collection.update({'_id':id}, {$set:{name:value}}); 

그러나 id 전통적인 MongoDB의 아이디 인 경우 컬렉션이 업데이트되지 않습니다. 유티 자체의 고유 ID에 대한 암시만으로 작동하는 것 같습니다. 이 문제를 어떻게 해결할 수 있습니까? 유성이 몽고 자신의 id 구조를 받아들이는 것이 가능한가?

+0

'id' 변수가 문자열 또는 ObjectId입니까? '502c7550bc3820529d81a9bd'와 같은 문자열 값은'ObjectId ("502c7550bc3820529d81a9bd")'와 일치하지 않습니다. – Stennie

+0

Meteor는'ObjectId'가'ReferenceError : ObjectId is not defined '인지 알지 못합니다. – Akshat

+3

Hrm이 나타납니다. 기존 MongoDB 데이터에 액세스하는 데 사용되는 기본 기능을 깨뜨리는 것이 이상하게 보입니다. Meteor github 대기열에 문제가 있습니다. ObjectId()를 사용하여 기존 mongodb 레코드로 작업 할 때 [update()]가 깨졌습니다 (https://github.com/meteor/meteor/issues/61). 문제 일 수도 있습니다. [meteor-talk google 그룹] (https://groups.google.com/forum/?fromgroups#!forum/meteor-talk)에 대해서도 물어볼 가치가 있습니다. – Stennie

답변

6

새 ObjectID를 사용하여 ID를 mongodb 객체 (서버 측)로 변환 한 다음 업데이트 할 수 있습니다. :

var ObjectID, require; 

require = __meteor_bootstrap__.require; 

ObjectID = require("mongodb").ObjectID; 

Meteor.methods({ 
    SomeUpdate: function(upd) { 
    var id; 
    id = new ObjectID(upd['_id']); 
    return SomeDB.update({ 
     _id: id 
    }, { 
     $set: { 
     field: value 
     } 
    }, function(res) { 
     return console.log(res); 
    }); 
    } 
}); 
+0

또한 objectid 'new MongoDB.BSONPure.ObjectID'를 사용하여 mongodb 꾸러미에 implentation하면'var require = __meteor_bootstrap __. require; var MongoDB = require ("mongodb");'objectid가 문자열로 전달되는 한 업데이트가 서버 측에서 완료되면 클라이언트 측에서 작동합니다 – Akshat

7

맞습니다. Meteor의 DDP 프로토콜은 Mongo ObjectId과 같은 비 JSON 유형을 지원하지 않습니다. 이것이 문제라는 것을 알고 있습니다 : 그것은 oldest open issue이고, 이는 our roadmap입니다.

이 문제를 해결할 수있는 "쉬운"빠른 수정이 있지만 우리는 다른 비 JSON 유형 (날짜, 바이너리 블롭 등)을 처리하도록 프로토콜을 확장하는 맥락에서이 작업을 선호합니다. 특정 단기 해킹보다