如何阻止在 Mongoose 数组中创建重复项 | NodeJS 猫鼬

Posted

技术标签:

【中文标题】如何阻止在 Mongoose 数组中创建重复项 | NodeJS 猫鼬【英文标题】:How do I stop duplicates from being created in a Mongoose Array | NodeJS Mongoose 【发布时间】:2021-08-17 03:40:39 【问题描述】:

好的,我如何阻止在 Mongoose 数组中创建重复项

这是我的代码:

 channel.send(`Welcome $member.user.tag Invited By $invite.inviter.tag`)
                client.invites[invite.code] = invite.uses

                const req = await InviteLogger.findOne(
                    ServerID: member.guild.id,
                    UserID: invite.inviter.id
                )

                if(!req) 
                    const doc = new InviteLogger(
                        ServerID: member.guild.id,
                        UserID: invite.inviter.id
                    );
                    await doc.save();
                ;

                const doc = await InviteLogger.findOneAndUpdate(ServerID: member.guild.id, UserID: invite.inviter.id, $inc:  Joins: 1  , new: true);

                if(req.Invited === member.user.id) 
                    return;
                
                const doc1 = await InviteLogger.findOneAndUpdate(ServerID: member.guild.id, UserID: invite.inviter.id, $push:  Invited: member.user.id  , new: true);

还有一个关于 Schema 外观的屏幕截图:

【问题讨论】:

你可以使用$addToSet 【参考方案1】:

如果您不想重复 member.user.id,请使用以下命令:

if(member.user.id.includes(req.Invited)) return;

这会检查member.user.id 是否是数组中的元素之一。 并删除这部分代码:

if(req.Invited === member.user.id) 
    return;

这段代码什么都不做,因为它检查整个数组是否等于member.user.id,而您要做的只是检查它是否是数组的一部分。

【讨论】:

以上是关于如何阻止在 Mongoose 数组中创建重复项 | NodeJS 猫鼬的主要内容,如果未能解决你的问题,请参考以下文章

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性