В правилах проверки базы данных Mongo ошибка моего оператора вставки - PullRequest
0 голосов
/ 11 марта 2019

Это немного странно для меня, я новичок в mongo db.

Я установил следующие правила проверки через консоль NoSQLBoster:

let validator = [
    {language : {
        $type : "string",
        $exists : true
    }},
    {label : {
        $type : "string",
        $exists : true
    }},
    {text : {
        $type : "string",
        $exists : true
    }},
    {order : {
        $type : "int",
        $exists : true
    }}
  ];

db.runCommand( {
  collMod: "profile",
  validator,
  validationLevel: "moderate", //off | strict
  //validationAction: "warn" |"error"
})

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

db.profile.insert({language: 'en', label: 'Born', text: '31 Dec 1983 - Jaén, Spain', order: 1})

Я претендую на то, чтобы сделать все эти поля обязательными.И даже предоставляя их все и имея соответствующий тип, я всегда получаю следующую ошибку вставки:

{
"message" : "write failed with error: {" +
          "    'nInserted' : 0," +
          "    'writeError' : {" +
          "    \t'code' : 121," +
          "    \t'errmsg' : 'Document failed validation'" +
          "    }" +
          "}",
"stack" : "script:1:96" +
          "script:1:96" +
          "script:1:96" +
          "script:1:96",
"code" : {
    "nInserted" : 0,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0
}
}

Теперь это стало любопытством ... Что я делаю не так?

Спасибо заваше время

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Я решил свою проблему. Мне нужно было только функцию NumberInt (), чтобы обернуть целое число. В противном случае он считается числом с плавающей точкой. Следующее работало как ожидалось:

db.profile.insert({language: 'en', label: 'Born', text: '31 Dec 1983 - Jaén, Spain', order: NumberInt(1)})

Спасибо всем!

1 голос
/ 11 марта 2019

Это специально.

Подробности

The mongo shell treats all numbers as floating-point values by default.
The mongo shell provides the NumberInt() constructor to explicitly specify 32-bit integers.

Источник: https://docs.mongodb.com/manual/core/shell-types/#numberint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...