如果某个字段值尚未填充,我是否可以检查是否仅推送了一个值?

时间:2015-12-13 22:37:15

标签: arrays mongodb meteor

我正在尝试创建一个Meteor应用程序,让用户将值推送到数据库。它工作正常,但有一个小问题。一旦某个用户推送了他的信息,我就不想让同一个用户创建另一个条目。或者必须阻止它,或者必须覆盖用户推送的值以获得第二次发布的值。现在我得到了同一个用户的多个条目。

这是我的代码。希望你能在这里帮助我。提前谢谢。

getDefaultSharedPreferences

1 个答案:

答案 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:1,那么数组可能只是UserStory文档中的一个键吗?