2016-06-22 3 views
0

У меня есть метеоритный игра enter image description hereМетеор Монго получить это значение

На сервере у меня есть таймер, который вызывает метод метеора moveFish.

Meteor.startup(() => { 
    Meteor.setInterval(function(){ 
     Meteor.call("moveFish") 
    }, 40); 
}); 

Этот метод выбирает все рыбы живы и заставить их двигаться

Meteor.methods({ 
    moveFish: function(id, speed) { 
     Meteor.users.update({ "fish.alive": true }, { $inc: { "fish.positionX": 2 } }) 
    } 
}) 

enter image description here

Как переместить рыбу с помощью this.fish.speed вместо значения 2

Meteor.users.update({ "fish.alive": true }, { $inc: { "fish.positionX": 2 } }) 

* Обратите внимание, t шляпа не работает

Meteor.users.update({ "fish.alive": true }, { $inc: { "fish.positionX": "fish.speed" } }) 

Это работает

Meteor.users.find().map(function(user) { x = user.fish.speed Meteor.users.update(user, {$inc: {"fish.positionX": x} }) }) 

ответ

0

К сожалению, документ не может использовать ссылку на себя на операции обновления.

Вы должны найти его первым и перебирать все документы вручную в этом случае:

Meteor.users.findAll({ "fish.alive": true }).fetch().forEach(function(fish) { 
    fish.positionX += fish.speed; 
    fish.save(); 
}); 
+0

Это полностью работает Meteor.users.find() отображение (функция (пользователя) { х = пользователь.. fish.speed Meteor.users.update (пользователь, {$ inc: {"fish.positionX": x}}) }); – Alexander

+0

Да, но работа с самим документом выглядит намного проще, чем функция «обновления». –

+0

Вы правы. Но я не уверен в хорошей производительности. Поэтому я продолжаю надеяться – Alexander

Смежные вопросы