これは非常に奇妙な問題です。
で を実行していcursor.observe()
ますTracker.autorun()
が、変更はページを更新したときにのみ発生します。重要なコードは次のとおりです。
クライアント側
Tracker.autorun(function (){
var initializing = true;
Links.find().observe({
added: function(doc){
var parents = Links.find({stacks: {$exists: true, $not: {$size: 0}}});
//Find the parent of this item with a stack array
if(!initializing){
_.each(parents.fetch(), function(parentDoc){
_.each(parentDoc.stacks, function (stackId){
//The troublesome server call
Meteor.call("addLinksFromDirToStack",
stackId, parentDoc.shared[0].id, parentDoc._id);
});
});
}
initializing = false;
}
});
});
サーバ側
Meteor.methods({
addLinksFromDirToStack: function(stackId, userId, dirId){
var stack = Stacks.findOne(stackId);
if (stack){
var webArray = stack.webArray;
webArrayFiller(dirId, webArray);
Stacks.update(stackId, {$set: {webArray: webArray}});
Stacks.update(stackId, {$addToSet: {users: userId}});
}
// NOTE: IF I QUERY THE STACKS COLLECTION HERE, I SEE THE CHANGES
}
});
webArrayFiller = function(dirId, webArray){
//Update array
}
上記のように、更新後に Stacks コレクションを直接クエリすると、変更がデータベースに反映されます。ただし、Mongo Shell からクエリを実行すると、更新されていない古いスタックが引き続き表示されます。これはクライアント側のケースで、変更を表示する必要があります。
Meteor Reset を試みましたが、役に立ちませんでした。どんな助けでも大歓迎です。