gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:25:43 26 4
gpt4 key购买 nike

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

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

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

最佳答案

来自mongo docs

The $addToSet operator adds a value to an array unless the value is already present, in which case $addToSet does nothing to that array.

由于您的数组元素是对象,因此 是整个对象,而不仅仅是用户名键。这意味着只要 estimation 值不同,单个用户就可以创建多个 name, 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 的对象。这可能会使该项目的 future 开发人员感到困惑;)此外,如果您的 Estimations 集合与 UserStory 的比例为 1:1,那么数组可能只是 中的一个键UserStory 文档?

关于arrays - 如果某个字段值尚未填充,我可以检查是否仅推送值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34257236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com