我正在尝试创建一个Meteor应用程序,让用户将值推送到数据库。它工作正常,但有一个小问题。一旦某个用户推送了他的信息,我就不想让同一个用户创建另一个条目。或者必须阻止它,或者必须覆盖用户推送的值以获得第二次发布的值。现在我得到了同一个用户的多个条目。
这是我的代码。希望你能在这里帮助我。提前谢谢。
getDefaultSharedPreferences
答案 0 :(得分:2)
$ 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
文档中的一个键吗?