在NOSQL Mongodb中扁平化数据模型架构有什么缺点吗?

时间:2019-05-18 12:29:13

标签: database mongodb typescript architecture nosql

我正在使用NodeJS和typescript,并且正在为我的函数进行键入,以便获得自动完成功能。

目前,我对用户实体有这样的架构

interface User {
  "_id": string
  "coach": {
    "businessCard": string
  }
  "firstname": string
}

我正在使用一个嵌套对象作为coach属性,但是我的问题是:这样做的目的是什么,在MongoDB的背后创建一个以一对一关系引用的对象。

  1. 这可能会降低性能
  2. 我在键入函数以限制可以在打字稿中定位的字段方面遇到问题

让我们看一个例子:

await this.client.collection<User>('User').findOneAndUpdate(
     { _id: new ObjectID(userId) },
     {"coach.businessCard": "50"},
);

将更新嵌套对象。

但是使用

时,此语法的工作方式相同
interface User {
  "_id": string
  "coach.businessCard": string
  "firstname": string
}

区别在于,现在我可以统一使用一种与点表示法匹配的语法。


与第二个扁平化符号相比,使用我给出的第一个符号可能有什么优势?

最诚挚的问候

1 个答案:

答案 0 :(得分:0)

使用嵌套文档一对一关系的优势如下:

1。。它表示数据字段之间的连接。例如:要保存用户地址,我们需要输入多个字段,例如:

typename

使用一对一关系,我们可以将相关信息绑定到一个单元中,如下所示:

 -> Address line 1   
 -> Address line 2   
 -> Locality    
 -> Region    
 -> Postcode    
 -> Building    
 -> Sub-Building    
 -> etc.

2。。从数据库中检索此类信息很有用。例如:

->要获取完整的地址详细信息,我可以使用一个键进行投影。

address: {
     Address line 1: String ,
     Address line 2: String,    
     Locality: String,    
     Region: String,    
     Postcode: Number,        
     Building: Number,
     Sub-Building: Number,
     etc: String
} 

->要获取特定的地址字段,我可以像下面这样进行投影:

db.collection.find({},{ address: 1} )