こんにちは私はコレクションの変更を観察し、変更ログを保存しようとしています、コレクションを作成した直後に観測を設定しました。どのユーザーが変更を行ったか知っていますが、パブリッシュメソッドにオブザーバーを配置しようとしましたが、複数のオブザーバーを生成し、1つのことが行われたときにログに多数のエントリを作成し、しかし、私はどのユーザーにログインしても問題はありません。ログはパブリッシュにサブスクライブしなければならない最初のユーザーの名前で保存されます。ユーザーごとにオブザーバーを作成し、 、私はかなりそれが本当にサーバー上で激しいことを確信している、より良い方法がある必要があります。クライアントにオブザーバーを設定しているのでしょうか?クライアントがログ収集にアクセスすることは望ましくありません。流星コレクションは、ユーザーの活動ログを観察します
私の最初の試みだProducts = new Mongo.Collection("products");
Log = new Mongo.Collection("log");
var initializing = true;
Products.find().observe({
added: function(newDocument) {
if (initializing) return;
//how to get user here?
Log.insert({
idUser: ???,
date: new Date(),
document: newDocument
});
}
});
initializing = false;
は、ここで私は、公開にそれを試してみましょう:
var productsObserveHandle;
Meteor.publish('products', function() {
var initializing = true;
if (!productsObserveHandle) {
productsObserveHandle = Products.find().observe({
added: function (document) {
if (initializing) return;
var userProfile = Meteor.users.findOne({_id:this.userId}).profile;
Log.insert({
idUser: this.userId,
userProfile: userProfile,
date: new Date(),
eventType: "added",
document: document
});
}.bind(this)
});
}
initializing = false;
...
});
どんなに多くの異なった、この1つは、ほとんどそれを得ないが、それは常に同じユーザーとしてログを保存しますオブザーバーのハンドルは既に作成されているので、試してみてください。
UPDATE:[OK]を、私は私がどこかになっていると思う、私はコレクションのサブスクリプション後にクライアント上で観察を設定し、すべての観察方法added
、changed
、removed
コールログを保存し流星方法、およびMeteor.userId()
でユーザーを取得しましたが、現在はログアウトしてログインすると、minimongoデータベースは更新されますが、サブスクリプションは同じです(クライアント側のMeteor.startupですべてのサブスクリプションを行います)。私は観察者を止められず、更新後に再起動することはできません。アカウント変更のためにminimongoがいつ更新されているかを知る方法はありますか?ユーザーログアウト後にオブザーバーを削除し、ログイン後にタイムアウトを待ってオブザーバーを再度セットアップしようとする可能性がありますが、タイムアウトIの設定よりもminimongoの更新に時間がかかることがあり、最後のインサートがログを変更します。