MongoDB Связывание $ jsonSchema с другой $ jsonSchema - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть две схемы с отношением 1 к N.один - книга, а другой - автор.

enter image description here

Ниже я назвал имена трех файлов: book.js, genre.js и author.js.Как видите, в книге я сослался на жанр и автора из других файлов.

author: {
               $ref: "./models/author.js"
            },

и

"genre" : {
               $ref: "./models/genre.js",
               description: "must be a string and is required"
        }

Однако, когда я выпускаю это в монго>, я получаю следующее:

{
"ok" : 0,
"errmsg" : "$jsonSchema keyword '$ref' is not currently supported",
"code" : 9,
"codeName" : "FailedToParse"

}

IМне было интересно, как я мог это сделать, пожалуйста?

// book.js
var book = {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: [ "title", "author", "summary", "isbn", "genre" ],
         properties: {
            title: {
               bsonType: "string",
               description: "must be a string and is required"
            },
            author: {
               $ref: "./models/author.js"
            },
            isbn: {
               bsonType: "int",
               minimum: 2017,
               maximum: 3017,
               exclusiveMaximum: false,
               description: "must be an integer in [ 2017, 3017 ] and is required"
            },
            "summary" : {
               bsonType: "string",
               description: "must be a string and is required"
            },
            "genre" : {
               $ref: "./models/genre.js"
            }
         }
      }
   }
};

module.exports = book;

//genre.js
var genre = {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: [ "name"],
         properties: {
            first_name: {
               bsonType: "string",
               size: 100,
               description: "must be a string and is required"
            },
            url: {
               bsonType: "string",
               minLength:3,
               maxLength:20,
               description: "must be a string and size between [3, 100] is not required"
            }
        }
      }
   }
};
module.exports = genre;

//author.js
var Author = {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: [ "first_name", "family_name" ],
         properties: {
            first_name: {
               bsonType: "string",
               maxLength:100,
               description: "must be a string and is required"
            },
            family_name: {
               bsonType: "string",
               maxLength:100,
               description: "must be a string and is not required"
            },
            date_of_birth: {
               bsonType: "int",
               minimum: 0,
               maximum: 2018,
               exclusiveMaximum: false,
               description: "must be an integer in [ 0, 3017 ] and is required"
            },
            date_of_death: {
               bsonType: "int",
               minimum: 0,
               maximum: 2018,
               exclusiveMaximum: false,
               description: "must be an integer in [ 0, 2018 ] and is required"
            }
         }
      }
   }
};
module.exports = Author;

Кажется, справочные руководства не работают:

$jsonSchema: {
         bsonType: "object",
         required: [ "title", "author_id", "summary", "isbn", "genre" ],
         properties: {
            title: {
               bsonType: "string",
               description: "must be a string and is required"
            },
            author_id: {
               bsonType: ObjectId(),
               description: "must be a string and is required"
            },
            isbn: {

как

{
    "ok" : 0,
    "errmsg" : "$jsonSchema keyword 'bsonType' must be either a string or an array of strings",
    "code" : 14,
    "codeName" : "TypeMismatch"
}

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Большое спасибо.bsonType: "objectId".Если честно, я не люблю использовать Mongoose.Использование ручных ссылок:

original_author_id = ObjectId()

db.author.insert ({"_id": original_author_id, first_name: "ghadamali", family_name: "sarami", date_of_birth: NumberInt (1944)});original_genre_id = ObjectId ()

db.genre.insert ({"_id": original_genre_id, имя: "действие", URL: "www.action.com"});

дБ.book.insert ({

title:"az range gol",
author_id: original_author_id, 
summary: "shekle senasi shahname", 
isbn: NumberInt(12312), 
genre:original_genre_id

});

0 голосов
/ 02 декабря 2018

"Ключевое слово $ jsonSchema '$ ref' в настоящее время не поддерживается",

Согласно сообщению об ошибке, с которым вы столкнулись, реализация JSON Schema не поддерживает (как в MongoDB 4.0)поддержка ссылки ($ref).Поскольку $jsonSchema проверяется на сервере базы данных, относительный путь к файлу не подходит;вместо этого вам следует включить необходимые правила проверки схемы.

Если вы хотите большей гибкости, вы можете найти библиотеку проверки, которую вы можете использовать в своем коде приложения.Существует несколько пакетов JSON Schema в NPM, а также альтернативные подходы, такие как Object-Document Mappers (например, Mongoose ).

Кажется, что справочные руководства не работают

     bsonType: ObjectId(),

Использование ObjectId() здесь недопустимо в формате JSON.Вам необходимо указать строковое значение с типом BSON : bsonType: "objectId".

Для получения дополнительной информации см. $jsonSchema Расширения и Упущения в документации MongoDB для вашей версии сервера.

...