2015-12-13 1 views
2

Я пытаюсь сделать приложение Meteor, чтобы пользователи могли указать значение в базу данных. Он работает нормально, но есть небольшая проблема. Как только какой-то пользователь нажал свою информацию, я не хочу, чтобы тот же пользователь создал другую запись. Или это должно быть заблокировано, или значение, которое пользователь нажимает, должно быть перезаписано для значения, которое он публикует во второй раз. Теперь я получаю несколько записей одного и того же пользователя.Могу ли я проверить, если значение только толкается, если определенное значение поля уже не заполнено?

Вот мой код. Надеюсь, ты поможешь мне здесь. Заранее спасибо.

 Estimations.update(userstory._id, { 
      $addToSet: { 
       estimations: [ 
        {name: Meteor.user().username, estimation: this.value} 
       ] 
      } 
     }); 
+0

Вы можете проверить коллекцию для существования поля имени с текущим именем, а затем обновить или вставить значение. Я имею в виду, что вам нужно написать, если условие в фоновом режиме. –

ответ

2

Из mongo docs

оператора в $ addToSet добавляет значение в массив, если значение не уже присутствует, в этом случае $ addToSet ничего не делает для этого массива.

Поскольку ваши элементы массива являются объектамизначение является всем объектом, а не только ключ имени пользователя. Это означает, что один пользователь может создать несколько пар name, estimation, если значение estimation отличается.

Что вы можете сделать, это удалить любое значение для пользователя, а затем снова вставьте:

var username = Meteor.user().username; 

Estimations.update({ userstory._id }, 
    { $pull: { estimations: { name: username }}}); // if it doesn't exist this will no-op 

Estimations.update({userstory._id }, 
    { $push: { estimations: { name: username, estimation: this.value }}}); 

В качестве комментария, у вас есть коллекция под названием Estimations, который содержит массив называется estimations, который содержит объекты с ключи estimation. Это может смутить будущих разработчиков в проекте;) Также, если ваша коллекция Estimations составляет 1: 1 с UserStory s, возможно, массив может быть только ключом внутри документа UserStory?

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