2012-08-16 11 views
8

Im cercando di fare un semplice aggiornamentoaggiornamento collezione di meteoriti con id tradizionale

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

o anche

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

Ma la collezione non verrà aggiornato se la id sono un tradizionale MongoDB id. Sembra funzionare solo con meteore possedere l'impianto di ID unici. Come posso rimediare a questo. È possibile che la meteora accetti la propria struttura di id di mongo?

+0

La variabile 'id' è una stringa o ObjectId? Un valore di stringa come '502c7550bc3820529d81a9bd' non corrisponde a' ObjectId ("502c7550bc3820529d81a9bd") '. – Stennie

+0

Meteor non sa cosa sia un 'ObjectId'' ReferenceError: ObjectId non è definito' – Akshat

+3

Hrm, sembra che sia il caso, anche se sembra strano rompere una caratteristica predefinita che verrebbe utilizzata per accedere ai dati MongoDB esistenti :(C'è un problema aperto nella coda dei github di Meteor: [update() rotto quando si lavora con i record mongodb preesistenti usando ObjectId()] (https://github.com/meteor/meteor/issues/61), che sembra lo stesso problema che stai cercando di risolvere. Forse vale la pena chiedere al [gruppo google di meteor-talk] (https://groups.google.com/forum/?fromgroups#!forum/meteor-talk). – Stennie

risposta

6

È possibile convertire l'ID in un oggetto mongodb (sul lato server) utilizzando il nuovo ObjectID e quindi eseguire l'aggiornamento. :

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

È anche possibile inserire l'oggetto implentation nel pacchetto mongodb usando 'new MongoDB.BSONPure.ObjectID' mentre si allega un' var require = __meteor_bootstrap __. require; var MongoDB = require ("mongodb"); 'e funzionerebbe sul lato client quando l'aggiornamento viene eseguito sul lato server delle cose fintanto che l'objectid viene passato come una stringa tra – Akshat

7

Hai ragione: il protocollo DDP di Meteor non supporta i tipi non JSON come Mongo ObjectId. Sappiamo che questo è un problema: è il nostro oldest open issue ed è il our roadmap.

Mentre ci sono sicuramente alcune "facili" correzioni rapide che risolverebbero questo problema, preferiremmo farlo nel contesto dell'estensione del nostro protocollo per gestire altri tipi non JSON (date, blob blob, ecc.) Piuttosto di un attacco specifico a breve termine.

Problemi correlati