0

私は流星のコレクションを持っており、ユーザーが一度に複数のアイテムを編集できるようにし、[保存] ボタンをクリックしてすべてを更新できるようにしたいと考えています。

これは私のコレクションです:

EmpresasUsuarias = new Mongo.Collection("empresasUsuarias");

そして、クライアントでこれを行い、$scope に入れます。

$scope.empresasUsuarias = $meteor.collection(EmpresasUsuarias, false);

つまり、ユーザーがいくつかのアイテムを追加して [保存] をクリックすると、配列内の新しいアイテム (のみ) を収集し、meteor メソッドを介してサーバーに送信します。サーバーでは、メソッドは (mongo) コレクションに項目を挿入します。フローがクライアントに戻るまで、すべて問題ありません。そこで、コレクションはこれらすべての新しいレコードを再び「バック」して複製し、(クライアント) コンソールにエラーが表示されます。

Duplicate _id in new_results

私が考えているのは、アイテムが挿入されてクライアントに送り返されると、購読/公開メカニズムがアクティブになることです。しかし、それらはすでにそこに存在し、Meteor は重複していると見なします (つまり、Meteor はアイテムを同期せずに重複させ、エラー メッセージで終了します)。

クライアントの新しいレコードごとに _id を割り当てていると言わなければならないので、サーバーに到達した時点で、既に_id を持っています。

ここで何が間違っていますか?Meteor がそれらのアイテムが異なると考えて、それらが重複していると言うのはなぜですか?

助けてくれてありがとう、さようなら...

4

1 に答える 1

1

さて、これは私が私の問題を解決するためにしたことです。保存する前にコレクションを停止し、保存後に再表示しました。

  1. ユーザーの編集を$scope配列に保存する
  2. コレクションの停止:$scope.MyCollection.stop()
  3. $scope.MyCollection.length = 0;
  4. サーバー(Meteor)メソッドを呼び出して編集を保存します(編集で配列を渡します)
  5. 流星コレクションを購読する(再び)
  6. $scope.MyCollection = $meteor.collection(MyCollection, false)

_idクライアントで(新しいドキュメントの) sを取得し続けます。私がそれを正しく行っているかどうかはわかりませんが、どうやらうまくいくことを知っているだけです。

于 2015-06-17T20:10:08.393 に答える