gpt4 book ai didi

javascript - 哪个更糟?多一个数据库访问权限还是一个过时的值?

转载 作者:行者123 更新时间:2023-11-30 09:59:34 25 4
gpt4 key购买 nike

问题

我正在使用 AngularJS、Node JS、Express 和 MongoDB 运行一个应用程序。我正在访问 MongoDB trought Mongoose 。我的问题是我有一张剑的 list ,每把都是由某人锻造的。但是,要访问某人的个人资料,我需要使用某人的 ID。 ID 是唯一的。但我无法将链接显示为链接“352384b685326vyad6”。因此,当有人创建了一把剑时,我会将他或她的名字存储在剑信息中。

例如,要显示剑的列表,我可以这样做:

<div ng-repeat='sword in swords'>
<p> Sword name: {{sword.name}} </p>
<p> Author: <a href='#/user/{{sword.createdByID}}'> {{sword.createdByName}} </a> </p>
</div>

但是,如果用户更改了他的名字,剑将不会相应地更新他的创建者名字。我应该怎么办?我想到了一些解决方案,但我不知道哪个以及是否可以很好地解决这个问题。

  • 当有人更改自己的名字时,我可以使用新的用户名和 ID 发出 POST 请求,更新所有 createdByID 等于用户 ID 的剑。但我觉得这太奇怪了。

    SwordModel.find({ createdByID: req.body.id}, [...]);
  • 当通过 GET 请求在 Controller 中加载剑时,为每把剑发出另一个 GET 请求并根据 sword.createdById 更新 sword.username。

    UserModel.findById(req.body.id), [...]);
  • 忘记用户体验并使用难看的链接。

我想知道如何在不影响我的数据库的情况下更新每把剑的用户名感谢您的任何建议。

型号 - 仅供引用。

剑.js

var mongoose = require('mongoose');
var SwordModel = mongoose.model('SwordModel',
{
name: String, //Sword's name
createdById: String, //ID of the user who created.
createdByName: String //Name of the user
});
module.exports = mongoose.model('SwordModel', SwordModel);

用户.js

var mongoose = require('mongoose');
var UserModel = mongoose.model('UserModel',
{
name: String, //Name of the user.
ID: String //ID of the user.
});
module.exports = mongoose.model('UserModel', UserModel);

最佳答案

如果您使用 Mongoose 架构,则可以通过在 Swords 中引用用户来实现。在引用另一个模式后,您可以使用 populate 方法来获得所需的结果。

示例(可能不完全是,但类似于以下内容):

剑图:

var swordSchema = new Schema({
name: String,
createdBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});

使用架构制作模型:

var swordModel =  mongoose.model('Sword', swordSchema);

使用 populate 查找您要查找的内容。

请在此处查看填充的完整文档 - http://mongoosejs.com/docs/populate.html

编辑:请注意,我建议仅在用户模型中保留用户名并仅引用它。

关于javascript - 哪个更糟?多一个数据库访问权限还是一个过时的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32388996/

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