2017-02-18 21 views
0

Итак, у меня есть функция, которая должна выполняться в случае, если условие if истинно. Я просто не знаю, как реализовать его в методе. У меня есть следующий код:Как написать оператор if, чтобы проверить, превышает ли какой-либо элемент в массиве конкретное значение/дату?

Meteor.methods({ 
'popItems': function() { 
    var date = new Date().getTime(); 

    if ("check if this.userId && any item in the array 'itemIds' is $gt date") { 

    userManagement.update({ 
     '_id': this.userId 
    }, { 
     $pop: {'itemIds': -1} 
     } 
     } 
    ); 
    }; 
    } 
}); 

Таким образом, в случае, если условие истинно, то функция $pop должна быть выполнена. В случае ложных это не должно. Я написал это для предложения if, но он не работает:

if (this.userId && userManagement.find({ 
      'itemIds': {$gt: date}})) {...$pop function...} 

Любая помощь очень ценится! Благодарю.

ответ

1
Meteor.methods({ 
    'popItems': function() { 
     var date = new Date().getTime(); 

     if (this.userId && userManagement.find({'itemIds':{ $gt: date}}).count() > 0) { 

      userManagement.update({ 
       '_id': this.userId 
      }, { 
       $pop: {'itemIds': -1} 
      }); 
     } 
    }; 
}); 
+0

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и/или почему оно решает проблему, улучшит долгосрочную ценность ответа. –

+0

Большое спасибо! Реализовано и работает отлично. Я думаю, что .count> 0 сообщает if, если есть больше, чем 0 элементов, которые являются $ gt, чем дата, введите $ pop. Это то, что мне нужно. Спасибо, я просто не смог найти синтаксис. – Jaybruh

1

Включить запрос в операции обновления как

Meteor.methods({ 
    'popItems': function() { 
     var date = new Date(); 
     userManagement.update(
      { 
       '_id': this.userId, 
       'itemIds': { '$gt': date } 
      }, 
      { '$pop': { 'itemIds': -1 } } 
     ); 
    } 
}); 

Я сделал некоторые предположения в придумывая выше решения. Первым из них является itemIds - массив, состоящий только из объектов Date, например.

itemIds: [ 
    ISODate("2017-01-25T06:20:00.000Z"), 
    ISODate("2017-01-26T06:20:00.000Z"), 
    ISODate("2017-01-27T06:20:00.000Z"), 
    ... 
    ISODate("2017-02-25T06:20:00.000Z") 
] 

выше запрос в операции обновления также могут быть определены с $and оператора как:

Meteor.methods({ 
    'popItems': function() { 
     var date = new Date(); 
     userManagement.update(
      { 
       '$and': [ 
        { '_id': this.userId }, 
        { 'itemIds': { '$gt': date } }, 
       ] 
      },   
      { '$pop': { 'itemIds': -1 } } 
     ); 
    } 
}); 
+0

Спасибо! Звучит очень логично. Однако, когда я использую $ и версию, он $ выдает больше одного элемента (ровно 2 элемента) из массива itemIds (не знаю почему). Я выполнил ответ ниже с if() и .count(), потому что это также отлично работает, и мне просто нужно добавить элемент .count. Будет ли преимущество вашей реализации? – Jaybruh

+1

Преимущество в том, что вам необязательно делать дополнительный вызов на сервер с помощью 'userManagement.find ({'itemIds': {$ gt: date}}). Count()', все делается в рамках функции 'update' так как часть объекта запроса очень эффективна. – chridam