2012-08-16 16 views
8

Im basit güncelleştirme yapmaya çalışıyorMeteor toplama güncelleme

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

hatta

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

Ama id geleneksel mongodb kimliği ise toplama güncelleme olmayacaktır. Sadece meteorların kendine özgü kimliğin kendi implentasyonu ile çalışıyor gibi görünüyor. Bunu nasıl giderebilirim. Meteor, mongo'nun kendi kimlik yapısını kabul etmek için mümkün mü?

+0

'id' değişkeniniz bir string veya ObjectId mi? 502c7550bc3820529d81a9bd gibi bir dize değeri, ObjectId ("502c7550bc3820529d81a9bd") 'ile eşleşmez. – Stennie

+0

Meteor, bir 'ObjectId' nedir? ReferenceError: ObjectId tanımlı değil ' – Akshat

+3

Hrm, mevcut bir MongoDB verisine erişmek için kullanılacak bir varsayılan özelliği kırmak garip görünüyor olsa da, böyle görünüyor, görünür Meteor github kuyruğunda açık bir sorun var: [update(), ObjectId()] ile önceden var olan mongodb kayıtları ile çalışırken (https://github.com/meteor/meteor/issues/61) Çözmeyi denediğiniz problem: Belki de [meteor-talk google grubu] 'nu (https://groups.google.com/forum/?fromgroups#!forum/meteor-talk) da sormaya değer. – Stennie

cevap

6

Yeni ObjectID kullanarak kimliğinizi mongodb nesnesine (sunucu tarafında) dönüştürmek ve ardından güncelleştirmeyi yapmak mümkündür. :

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

Ayrıca objektifi koymak mümkündür bir "var require = __meteor_bootstrap __. gerektiren" iken yeni MongoDB.BSONPure.ObjectID' kullanarak mongodb paketine implentasyon gerektirir.var MongoDB = gerektiren ("mongodb"); 've istemci tarafındaki güncelleştirme, istemci tarafındaki bir dizge olarak geçirildiği sürece, nesnenin sunucu bitiminde güncelleme yapıldığında çalışır. – Akshat

7

Haklısınız: Meteor'ın DDP protokolü Mongo ObjectId gibi JSON türlerini desteklemiyor. Bunun bir sorun olduğunu biliyoruz: bu bizim oldest open issue ve our roadmap.

Kesinlikle bu sorunu çözecek bazı "kolay" hızlı düzeltmeler olsa da, bunu, diğer JSON olmayan türlerle (tarihler, ikili lekeler, vb.) Ilgilenmek için protokolümüzü genişletme bağlamında yapmayı tercih ederiz. belirli bir kısa vadeli kesmek daha.