3

私はこのコードを持っています:

Nodes = new Meteor.Collection("nodes");
[...]
Template.list.events({
  'click .toggle': function () {
      Session.set("selected_machine", this._id);
      Nodes.update(Session.get("selected_machine"), {$set: {"conf" :{"flag": true }}});
  }
});

meteor にエントリを更新するよう説得できません。DOM にマイクロ秒のフラッシュがありますが、サーバーは更新を拒否します。

これは私のデータです: { "_id" : ObjectId("50d8ec4f5919ffef343c9151"), "conf" : { "flag" : false }, "name" : "sepp" }

console.log(Session.get("selected_machine")); IDを表示します。安全でないパッケージがインストールされています。minimongo コンソールでの手書きの書き込みは期待どおりに機能します。

サブアレイを更新したくないので問題はありますか? 私は何を間違っていますか?ご協力ありがとう御座います

4

1 に答える 1

3

これは、データが MongoDB ObjectId を使用しているためです。これは、Meteor がこれらの値を更新できないという既知の問題です ( https://github.com/meteor/meteor/issues/61 )。

このハックをmongoシェル(meteor mongo)で実行して修正できます(antoviaqueの功績、コレクション用に編集しました)

db.nodes.find({}).forEach(function(el){
    db.nodes.remove({_id:el._id}); 
    el._id = el._id.toString(); 
    db.nodes.insert(el); 
});

Meteor は ObjectId を文字列と見なすため、MongoDB は更新するものを見つけられません。ローカル コレクションではこれらの _id が文字列に変換されるため、クライアント側で機能します。

実験では、mongo シェル経由ではなく、ブラウザ コンソール経由でデータを挿入する必要があります。これは、Meteor が UUID を生成し、すべてがうまくいく (そしてうまくいく) ためです。

PS: アプリを起動したときに同じ問題に遭遇しました。

于 2012-12-25T10:29:14.520 に答える