8

我试图做一个简单的更新

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

甚至

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

id但是如果是传统的 mongodb id ,则集合不会更新。它似乎只适用于流星自己实现的唯一 ID。我该如何补救。流星可以接受mongo自己的id结构吗?

4

2 回答 2

7

你是对的:Meteor 的 DDP 协议不支持非 JSON 类型,例如 Mongo ObjectId。我们知道这是一个问题:这是我们最古老的未解决问题,它在我们的路线图上。

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

于 2012-12-14T00:19:00.417 回答
6

可以使用 new 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);
    });
  }
});
于 2012-12-17T09:47:18.803 回答