为什么我的mongodb查询的更新不总是反映?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的mongodb查询的更新不总是反映?相关的知识,希望对你有一定的参考价值。

我的MongoDB查询中有一个Sessions.get()。这意味着显示的集合取决于Sessions.get()值。为了让您更清楚地了解我的意思,请在下面查找我的查询:

 Template.paymentB2C.onCreated( function(){
  Session.set('pendingFilter', [ "Pending", "Failed", "Success" ]);
});

.

Template.paymentB2C.helpers({

    'showTransactions': function(){

        var transactions = paymentDetails.find({ 
                           paymentStatus:{$in: Session.get('Filter')} 
                           }).fetch();

        return transactions;                    
    }   

});

上面的代码显示了一个事务列表。显示的交易类型在交易类型上有所不同,表明:未成功,成功,待处理交易,如下所示:

0:
  payersName: "Sa Acea"
  paymentStatus: "Success"
  _id: "D3gY4BoR2tvxdK4xv"
1:
  payersName: "Paul Acea"
  paymentStatus: "Pending"
  _id: "ajCjYbLaDP7x4iAFK"
2:
  payersName: "Simon Bolton"
  paymentStatus: "Success"
  _id: "K4d6wDrjRRdSyCkhW"

因此,我使用Filter会话值作为过滤器来指示要显示的事务类型。

我可以通过以下事件在三种类型的过滤器之间进行交换。在下面找到代码。

Template.paymentB2C.events({

  'click .ShowFailedTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Failed" ]);
    },

  'click .ShowSuccessfulTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Success" ]);
    },

  'click .ShowPendingTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Pending" ]);
    },

});

请注意,集合中没有Failed事务类型。所以我觉得很奇怪,每当我选择Failed过滤器'click .ShowFailedTransactions'期望所需效果为空白空页时,页面无法更新并继续显示上一个查询的结果,就像我从未点击过'click .ShowFailedTransactions'一样。

我想也许Session.set('Filter', [ "Failed" ])函数中的'click .ShowFailedTransactions'不起作用,所以我添加了一个console.log();来打印出Filter Session值,如下所示:

  'click .ShowFailedTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Failed" ]);
      var displaySession = Session.get('Filter');
      console.log("Filter Value is: " +displaySession );
    },

上面的代码在浏览器控制台中生成Filter Value is: Failed,表明Filter会话值按预期更新。

我很困惑,为什么页面不会响应/更新这个。

请帮助建议解决此问题的方法。

答案

您的代码中的问题是fetch,它不是被动的!好消息是你不需要它。试试这个:

Template.paymentB2C.helpers({
  'showTransactions': function(){
    return paymentDetails.find({paymentStatus: {$in: Session.get('Filter')}});
  }
});

以上是关于为什么我的mongodb查询的更新不总是反映?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Apollo 缓存更新没有反映在我的查询中?

范围变量值的变化没有反映在我的字符串中

Mongodb用populate返回更新的对象

Nodejs MongoDB 查询无法按预期工作

如何在不删除适配器的情况下更新数据集以反映数据源中添加的列?

golang golang动态db查询更新记录而不反映