即使原始模型中未指定新值,如何将新值添加到现有 MongoDB 数据库中

Posted

技术标签:

【中文标题】即使原始模型中未指定新值,如何将新值添加到现有 MongoDB 数据库中【英文标题】:How to add new values into existing MongoDB database even when it's not specified in original model 【发布时间】:2020-12-19 00:49:36 【问题描述】:

我有一个相当普通的数据库来存储您的平均数据,例如电子邮件和用户名。

我正在使用 Node.JS 和 Mongoose/MongoDB 创建这个数据库/后端。我想让它成为未来的证明。目前,我有一个用户模型,其中包含我认为我只需要的值,但是,我知道我必须稍后将值添加到用户的数据库中(模型中未指定) .

显然,由于已经使用模型创建了用户,我不想弄乱他们的数据。当用户发出请求时,我使用该模型通过他们的 ID 搜索用户,但是我只想在 JSON 文档中添加一个值和一些数据。要添加的数据可以在他们的 JSON 数据的根目录中,也可以在他们的 JSON 文档中的嵌套值中,所以我想知道如何做到这两点。

根据我的模型,我的数据结构如下:

user: 
    
     username: "",
     email: "",
     isVerified: "",
     password: "",
     hub: 
             isSetup: true,
             swVersion: 0.0`
    

更新现有数据的代码(在下面的示例中,我将嵌套的 JSON - 'hub' 值 'isSetup' 更新为 true:

User.update(_id: req.user.id, $set:  "hub.isSetup" : true)
.then((data) => 
    return res.json(message: data);
)
.catch(err => 
   // log.error(err);
    return next(message: 'Error updating User.');
);

如何将数据(如上)添加到数据库的现有文档中,而不锁定用于搜索用户的模型,模型是“用户”.....使用:User.update(...) 我在我的测试和搜索谷歌中发现,我只能将数据添加到数据库中,只要模型指定它 - 我不想这样做。

谢谢

【问题讨论】:

【参考方案1】:

您正在寻找的是严格模式选项。 https://mongoosejs.com/docs/guide.html#strict

如果你指定为false,你可以添加任何你喜欢的东西。

【讨论】:

在我的代码中哪里可以指定严格选项?当我在脚本中或模型本身中声明模型时?显然,它也是默认启用的,在我的测试中不是这样。 默认启用,因此您必须根据您的情况禁用它。在文档的链接中,您会看到一个具体的示例,该示例向您展示了放置它的位置。 new Schema(.., strict: false )

以上是关于即使原始模型中未指定新值,如何将新值添加到现有 MongoDB 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:如何将新值推送到特定键中?

在每次迭代期间将新值附加到列表中后,将列表值添加到字典中

如何将新值推送到 Store 对象?

如何使用 where 将新值插入表中

如何将新值插入两个相关表?

SIC / XE我可以将新值添加到已具有其自身值的值吗?