9

データベースにデータが追加されたときにユーザーにアラートを表示しようとしています。だから私は書いた(クライアント側で):

Meteor.autosubscribe(function() {
  ItemCollection.find().observe({
    added: function(item) {
      // Alert code
    }
  });
});

そして、サーバー側のデータベースに新しいアイテムが追加されたときにアラートが表示されるだけでなく(これは正常だと思います:))、ページを更新すると、以前に追加された各アイテムに対してもアラートが表示されることがわかりました。Meteor は、起動時に Mongo データベースからすべてのデータを取得し (ローカルの Minimongo DB に入力するため)、ローカル データベースに追加された各アイテムに対して「追加」イベントを発生させると思います。

しかし、これは正常な動作ですか? サーバー上のデータベースに「本当に」追加されたアイテムのみを受け取るにはどうすればよいですか?

4

1 に答える 1

13

クライアント側データベースのカーソルを観察しており、そのデータベースはページの読み込みが完了するまで同期を終了しない可能性があるため、動作は理にかなっています。この質問への回答で説明されているように、コレクションを明示的にサブスクライブすることを検討することをお勧めします。

データに created_at フィールドがある場合、ページの読み込み後に作成されたアイテムを確認できます。

  ItemCollection.find({created_at : {$gt: some_current_time}}).observe({
    added: function(item) {
      // Alert code
    }
  });
于 2012-04-18T23:21:10.773 に答える