Можно ли установить валидатор MongoDb как таковой, чтобы неопределенные свойства не вставлялись? - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь реализовать базу данных с использованием MongoDB для моего REST API, которая могла бы хранить и извлекать документы с определенными полями.

Я могу легко использовать mongoose, но я хочу использовать собственный драйвер MongoDB, так какЯ хочу изучать MongoDB, а не mongoose.

    {
      "$jsonSchema": {
       "bsonType": "object",
       "required": [
          "name",
          "email"
        ],
        "properties": {
          "name": {
            "bsonType": "string"
          },
          "email": {
          "bsonType": "string"
          },
          "profileImagePath": {
            "bsonType": "string"
          },
          "blogs": {
            "bsonType": ["object"]
          }
        }
      }
    }

Я ожидаю, что смогу вставлять только такие данные, как

   "name" : "john",
   "email" : "john@gmail.com"

или

   "name" : "john",
   "email" : "john@gmail.com",
   "profileImagePath" : "somePath"

, ноне

   "name" : "john",
   "email" : "john@gmail.com",
   "height" : "5'11"

Поскольку высота не указана в свойствах.

1 Ответ

0 голосов
/ 06 октября 2019

, так что я просматривал документацию MongoDB, и можно указать, могут ли дополнительные свойства быть вставлены в базу данных или нет, изменив значение по умолчанию для свойства AdditionalProperties.

В документации указано

Если true, дополнительные поля разрешены. Если ложно, они не являются. Если указан допустимый объект JSON-схемы, дополнительные поля должны проверяться на соответствие этой схеме.

По умолчанию установлено значение true.

Чтобы избежать вставки каких-либо дополнительных свойств, вам просто нужно добавить свойство AdditionalProperties следующим образом:

{
  "$jsonSchema": {
   "bsonType": "object",
   "required": [
      "name",
      "email"
    ],
    "properties": {
      "name": {
        "bsonType": "string"
      },
      "email": {
      "bsonType": "string"
      },
      "profileImagePath": {
        "bsonType": "string"
      },
      "blogs": {
        "bsonType": ["object"]
      }
    }
  "additionalProperties": false
  }
}
...