【问题标题】:In Meteor, a MongoDB update is not seen in the Mongo shell在 Meteor 中,在 Mongo shell 中看不到 MongoDB 更新
【发布时间】:2023-03-17 00:36:01
【问题描述】:

这是一个非常奇怪的问题。

我在Tracker.autorun() 中运行cursor.observe(),但只有在我刷新页面时才会发生更改。这是重要的代码:

客户端

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 查询,我仍然看到旧的 Stack,没有更新。这是客户端的情况,应该显示更改。

我尝试了流星重置,但无济于事。任何帮助将不胜感激。

【问题讨论】:

    标签: mongodb meteor minimongo


    【解决方案1】:

    我知道为什么它不起作用了。

    我没有发布Stacks 集合的每个字段。特别是,不是users 字段。因此,当我尝试使用这一行更改集合时,它会失败:

    Stacks.update(stackId, {$addToSet: {users: userId}});
    

    但是,Minimongo 识别出更改,因此我的查询会错误地显示我已经成功。一旦服务器拒绝更新,它也会直接拒绝上面的行,使这两个更改都不会发生。显然,有些人发现 MongoDB 在失败的事务中缺少错误消息很麻烦。它肯定使这个错误很难找到。

    解决方案是将服务器端代码包装在if (Meteor.isServer) 中,这样它就只能在服务器端运行。一个不幸的结果是,由于异步性,这些调用无法轻易返回值,但有一些解决方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2015-08-15
      • 2018-06-15
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多