使用NodeJS更改MongoDB中集合的数据结构

时间:2019-03-31 00:11:29

标签: node.js mongodb

我正在使用NodeJS和MongoDB,

实际上,我对MongoDB中使用的数据结构有疑问,目前我将数据保存在数据库中,如下所示:

{
    "_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
    "tipo" : "First Post on MongoDB",
    "rates": {
            "user": "5c981a0f8a76d426dc04619e",
            "votation": 1
    },
}

但是我要存储数据的方式是这种结构:

{
    "_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
    "tipo" : "First Post on MongoDB",
    "rates": {
            "5c981a0f8a76d426dc04619e":{
                "votation": 1
           }
    },
}

我一直在尝试像上一个示例一样保存数据,但是我没有实现,

这是将常量保存在NodeJS中的方式。

  const post = {
    tipo: body.tipo,
    user: body.usuario,
    duration: 25,
    rates: 
      {
        user: body.usuario,
        votation: 1
      }

  };

这是我的模型:

interface IPost extends Document {
  tipo: String;
  user: Object;
  duration: number;
  rates: Object;
}

有人可以解释一下我该怎么做吗?

致谢。

1 个答案:

答案 0 :(得分:0)

如果您需要存储与主文档相关的键/值属性,然后将其可视化,则可能需要mongoose maps

地图的键始终是字符串。

rates: { type: Map, of: Number }

通过这种方式,您可以拥有以下内容:

rates: {"5c981a0f8a76d426dc04619e": 1}

使用此架构,您可以有多个费率,每个用户/密钥一个。

但是,如注释中所述,如果需要针对这些键/值进行查询,则这可能是次佳的解决方案。在这种情况下,应使用external schema reference。在这种情况下,我将使用三种架构方法:发布,用户和费率。

  • 一个帖子有多个费率
  • 价格属于用户和发布对

我发现一个similar question已经被要求。