代码之家  ›  专栏  ›  技术社区  ›  SirBT

为什么我的$sort操作符的日期函数在我的查询中不一致?

  •  0
  • SirBT  · 技术社区  · 6 年前

    我正在尝试编写一个查询,以便根据降序日期对文档进行排序 ...{sort: {paymentDate: -1 }} {sort: {paymentDate: -1 }} 似乎被忽视了! {排序:{paymentDate:-1}} 并且查询以正确的格式显示 分类 命令。

    我需要知道如何纠正这个问题!

    recipientsDetails.find().fetch(); 在浏览器控制台中查询:

    0:
    payersUserId: "hbieZBFNE53GpE8LP"
    paymentDate: "2019-02-11 02:37:05"
    payersNumber: "+25478887633"
    paymentStatus: "Failed"
    recipientNumber: "+25478887633"
    _id: "eFShDRzp9JM9ejG5S"
    
    1:
    payersUserId: "hbieZBFNE53GpE8LP"
    paymentDate: "2019-02-08 16:02:25"
    payersNumber: "+2547078887633"
    paymentStatus: "Failed"
    recipientNumber: "+25478887633"
    _id: "SnpNwsx49mZfPNSg7"
    
    2:
    payersUserId: "hbieZBFNE53GpE8LP"
    paymentDate: "2019-02-08 15:00:02"
    payersNumber: "+254707888633"
    paymentStatus: "Failed"
    recipientNumber: "+25478087703"
    _id: "ZHWSiRBYk2xoZvDzb"
    

    以上结果也是所需的排序顺序。

    帮手 代码可能会遮住一些光线。

    ../客户端/主要.js

    Template.paymentB2C.helpers({
    
    'enableButton': function () {
    
        var enableButtonStatusArray = [];   
        var userIdCode = Meteor.userId(); 
        var phoneNumber = Meteor.users.findOne({_id: userIdCode }, { fields: { "profile.telephoneNumber": 1 } } ); 
        var usersPhoneNumber = phoneNumber.profile.telephoneNumber; 
    
        var selectedRecipientDetails = recipientsDetails.find( { $or: [ { payersNumber: usersPhoneNumber }, { recipientNumber: usersPhoneNumber } ] }, 
    
                                                { fields: { 
                                                            "payersUserId": 1,
                                                            "paymentDate": 1,
                                                            "paymentStatus": 1,
                                                            "_id": 1
    
                                                } }).fetch();
    
    
             selectedRecipientDetails.forEach((user) => {
                        payersUserId = user.payersUserId;
                        paymentDate = user.paymentDate;
                        paymentStatus = user.paymentStatus;
                        _id = user._id;
    
                    if(paymentStatus === "Failed"){
    
                            enableButtonStatusArray.push({ 
                                paymentStatus: paymentStatus,
                                paymentDate: paymentDate,
                                _id: _id
                                });
    
                        }
    
                else if(paymentStatus === "Passed"){
    
                            enableButtonStatusArray.push({ 
                                paymentStatus: paymentStatus,
                                paymentDate: paymentDate,
                                _id: _id});
    
                       }
    
                Session.set('enableButtonStatusArray2', enableButtonStatusArray );
    
            });
    
        var enableButtonStatusArrayForPrint = Session.get('enableButtonStatusArray2');
    
    return enableButtonStatusArrayForPrint;
    
    }
    
    
    });
    

    请注意,这里的查询缺少 …{排序:{paymentDate:-1}} 功能。

    Router 代码:

    ../客户端/主要.js

    Router.route('/paymentB2C', {
    name: 'paymentB2C',  
    template: 'paymentB2C',
    
        waitOn: function(){
    
           return Meteor.subscribe('pendingPayments')
    
        }
    

    这导致了我的 Meteor.subscribe('pendingPayments') 发布功能:

    ../服务器/主要.js

    Meteor.publish('pendingPayments', function pendingPayments(){
    
       return recipientsDetails.find({}, {sort: {paymentDate: -1 }});
    
    });
    

    注意这里是我的 sort 功能。

    有人能解释为什么代码第一次运行时 分类 被忽略,文档被随机排序,但是在浏览器中点击刷新后是否按设计(正确)排序?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sudheer Jami    6 年前

    理想情况下,您应该在订阅之后对客户端查询上的数据进行排序,而不是在publish方法中对其进行排序。

    find 客户端中的查询将访问来自发布和排序的数据,但这两种方法都无效。此外,publish将授予订阅者数据访问权限,如果客户端的mini mongo已经拥有数据,除非新数据到达,否则它不会同步数据。

    找到 客户端的查询。

    paymentDate 字段不是“日期”。最好是 Date ISODate("2019-02-11T02:37:05.000Z") String "2019-02-11 02:37:05" . 因此,如果客户端的排序也不起作用,请尝试保存 付款日期 在数据库中作为 日期 而是作为一个