Есть ли недостатки в выравнивании схемы модели данных в NOSQL Mongodb? - PullRequest
0 голосов
/ 18 мая 2019

Я использую NodeJS и машинописный текст и набираю текст для своих функций, чтобы получить автозаполнение.

В настоящее время у меня есть схема, подобная этой для сущности пользователя

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

Я использую вложенный объект для свойства coach, но у меня такой вопрос: какой смысл делать это, за сценой MongoDB создает другой объект, на который ссылаются в отношении 1-к-1.

  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 голосов
/ 18 мая 2019

Преимущества использования однозначных вложенных документов следующие:

1. Представляет собой связь между полями данных.Например: чтобы сохранить адрес пользователя, нам нужно взять несколько полей, таких как:

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

С помощью отношения «один к одному» мы можем связать связанную информацию в одном блоке, как показано ниже:

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

2. Это полезно при получении такой информации из базы данных.Например:

-> Чтобы получить полную информацию об адресе, я могу проецировать одним ключом.

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

-> Чтобы получить конкретное адресное поле, я могу проецировать на него также, как показано ниже:

db.collection.find({},{ 'address.Locality': 1, 'address.Region': 1} )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...