流星集合更新与传统的id

Aks*_*hat 8 mongodb meteor

我试图做一个简单的更新

Collection.update(id, {$set:{name:value}}); 
Run Code Online (Sandbox Code Playgroud)

甚至

Collection.update({'_id':id}, {$set:{name:value}}); 
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ser 7

你是对的:Meteor的DDP协议不支持像Mongo这样的非JSON类型ObjectId.我们知道这是一个问题:这是我们最早的公开问题,它在我们的路线图上.

虽然肯定有一些"简单"的快速解决方案可以解决这个问题,但我们更愿意在扩展协议以处理其他非JSON类型(日期,二进制blob等)而不是特定的短路的情况下执行此操作. - 黑客攻击


小智 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);
    });
  }
});
Run Code Online (Sandbox Code Playgroud)