流星集合更新与传统的id

时间:2012-08-16 01:13:06

标签: mongodb meteor

我正在尝试进行简单的更新

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

甚至

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

但如果id是传统的mongodb id,则该集合不会更新。它似乎只适用于流星自己实现的唯一id。我该如何解决这个问题。流星有可能接受mongo自己的id结构吗?

2 个答案:

答案 0 :(得分:7)

你是对的:Meteor的DDP协议不支持非JSON类型,例如Mongo ObjectId。我们知道这是一个问题:它是我们的oldest open issue,它位于our roadmap

虽然肯定有一些“简单”快速解决方案可以解决这个问题,但我们更愿意在扩展协议以处理其他非JSON类型(日期,二进制blob等)而不是一个特定的短期黑客。

答案 1 :(得分: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);
    });
  }
});