gpt4 book ai didi

node.js - 使用 Mongoose 进行架构投票的 "right way"?

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

我正在使用 Mongoose/MongoDB 创建一个网络应用程序来存储将要投票的信息。我将在投票时存储用户名和 IP 地址(这样选民可以根据需要更新/修改他们的投票)。

根本问题:在 Mongoose 架构中安全架构投票的最佳方式是什么?

目前,我的模式看起来像这样(简化):

var Thing = new Schema({
title: {
type: String
},
creator: {
type: String
},
options: [{
description: {
type: String
},
votes: [{
username: {
type: String
},
ip: {
type: String
}
}]
}]
});

mongoose.model('Thing', Thing);

虽然这使得在数据库中查询任何给定的 Thing 变得非常容易,但由于显而易见的原因,它在安全方面变得更加成问题 - 我不想将用户名和 IP 地址返回给浏览器。

问题是,我不确定将 Thing 数据安全地返回到浏览器的最佳/最不痛苦的情况是:

  1. 遍历 Thing.options 中的每个选项,然后子循环遍历 Thing.options[i].votes 中的每个投票以找到投票通过请求数据的用户,然后删除所有投票以摆脱其他用户数据。这似乎非常耗费资源,但我找不到在子数组中使用 indexOf 的方法(欢迎指导),即 Thing.options.votes.indexOf(username) 或其他那种效果。

  2. 将投票信息存储在已经存在的 User 模式中,然后每次我想查询单个 Thing 时都必须搜索所有用户以获取投票数据并将它们放在一起。这似乎也比必要的低效/更多资源密集型/更复杂。

  3. 创建一个单独的 Vote 模式来更方便地存储数据,但随后添加另一个数据库调用(一个用于 Thing,一个用于 投票).

这个问题有点复杂,因为有不同的投票方式,这是最简单的。

研究......为了后代:

This question解决数据库中的投票问题,但针对关系数据库,而不是 MongoDB/Mongoose。

This question解决 Mongoose/Node.js 应用程序架构,但与投票无关。

This NPM Module向 Mongoose 模式添加投票,但不太符合我的需要。

This post看起来很有前途,因为作者正在做我在上面第 1 点中描述的事情(参见作者帖子中的 list 13),但他仍然创建了一个嵌套循环,从 list 13 的第 22 行开始,遍历每个选择/选项,然后通过对每个选择/选项的每次投票。

最佳答案

作为一个快速提示 - 为了防止 IP 地址从数据库中泄露 - 我建议添加额外的集合来存储所有投票敏感数据,但在同一文档中仍然有其他投票数据。

这在存储数据时会产生很小的开销,但根据设计,IP 信息不会提供给调用者,也不需要在每次调用时进行额外的数据清理来保护数据。

关于node.js - 使用 Mongoose 进行架构投票的 "right way"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37502984/

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