当前位置: 首页 > 知识库问答 >
问题:

使用mongoose/mongoDB创建/更新对象

朱欣荣
2023-03-14

互联网上充斥着处理数组的资源,但对象通常更适合数据,而且似乎更高效。

我想在动态字段名下存储键值对象,如下所示:

project['en-US'] = { 'nav-back': 'Go back', ... }
project['pt-BR'] = { 'nav-back': 'Volte', ... }

这样做似乎比保留一个包含所有语言的数组并对其进行过滤以获取给定语言的所有语言条目更有效。

我的问题是:如何使用猫鼬将键值对插入到具有动态名称的对象中?对象是否需要存在,或者如果在一个操作中不存在,我可以创建它吗?

我试过这个:

await Project.update(
{ _id: projectId },
{
  $set: {
    [`${language}.${key}`]: value,
  },
});

但不管我是否有一个空对象开始,都没有运气:{ok:0,n:0,nModified:0}

奖励:我应该为这些对象建立索引吗?如何建立索引?(我将要更新单个项目)

谢谢!

共有2个答案

苏波涛
2023-03-14

我使用原始代码片段解决了这个问题,但没有改变,而是将{strict:false}添加到模式中:

const projectSchema = new Schema({ ...schema... }, { strict: false });
茹元魁
2023-03-14

mongoose中,schema就是一切。它描述了您要从数据库中读取/存储的数据。如果您想在模式中动态添加一个新键,这将很困难。

在这种特殊情况下,我建议使用mongodb本机驱动程序,它对数据操作更为宽容。因此,您可以读取特定格式的数据,并将字段动态添加到其中。

为了恢复我的想法,您的动态变化应该如何发生:

  • 使用mongodb本机驱动程序将新密钥插入数据库数据

不要忘记动态更新您的mongoose模型,否则您将无法在下一次find中读取新密钥。

 类似资料:
  • 我正在尝试更新MongoDB中嵌套对象中的一个键值。目前,我的做法是覆盖整个嵌套对象,我如何改变一个键-值对?

  • 我有一个mongodb集合的mongoose模式,我将其定义如下: 在数据库集合中,我当前有一个文档,它包含除以外的所有属性的值,用于测试目的。我有一个服务器endpoint,当被调用时,它应该发出一个PUT请求来更新文档并向sketches数组中添加一个对象: 在这个web服务中,我基本上试图通过用户名选择用户文档,用户名作为参数传递给url字符串,如下所示: 由于某种原因,当我尝试使用具有以下

  • 本文向大家介绍MongoDB的创建、更新和删除,包括了MongoDB的创建、更新和删除的使用技巧和注意事项,需要的朋友参考一下 概要   下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容比较多,也比较繁琐,   同时使用频率也比较高,所以下一篇会拿出来单独介绍。废话不多说,连上服务器,我们直接进入正题! 一、创建   按照我

  • 问题内容: 我正在尝试使用Mongoose将AngularJS与MongoDB连接。我想传递控制器要使用的模型,所以我可以$ scope到数据。我不确定是否必须设置Angular Service,如果可以,您是否可以指出正确的方向。谢谢。 概述: 模型: 控制器: 问题答案: 您将需要一个临时步骤。直接从Angular转到Mongo是行不通的。如果您想要Mongo的通用REST接口,可以使用Ang

  • 目标 无明确目标 知识点 了解 mongodb (http://www.mongodb.org/ ) 学习 mongoose 的使用 (http://mongoosejs.com/ ) 课程内容 mongodb mongodb 这个名词相信大家不会陌生吧。有段时间 nosql 的概念炒得特别火,其中 hbase redis mongodb couchdb 之类的名词都相继进入了大众的视野。 hba

  • 问题内容: 给定班级价值: 我正在尝试使用创建该类的新实例: 从主要: 这不起作用,Eclipse的输出: 如果是这样,怎么可以用我创建了一个新的价值目标,在那里我调用的? 谢谢 问题答案: 您需要为此找到确切的构造函数。只能用于调用null构造函数。所以写