Mongoose ODM сохраняет неправильное имя модели в коллекции MongoDB - PullRequest
0 голосов
/ 01 апреля 2019

Здравствуйте, Stackoverflowers!

У меня возникла странная проблема с Mongoose, которая создала коллекцию под названием "Сейфы".

вот мой пример кода:

const mongoose = require('mongoose')
mongoose.connect('mongodb://mongodb:27017/test', { useNewUrlParser: true })

const Safe = mongoose.model('Safe', { name: String })

const safe = new Safe({ name: 'foobar' })
safe.save().then(() => console.log('done'))

когда я открываю оболочку базы данных и запускаю эту команду:

mongo test --eval "db.getCollectionNames()"

отвечает:

MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f9cfa8b9-58e2-40b8-9907-ecd18039935a") }
MongoDB server version: 4.0.6
[ "saves" ]

Теперь я попытался создать модель с набором имен "Сейфы", и Mongoose, похоже, изменил его с сейфов> сохраняет ...

Есть ли у мангусты защищенные модели, которые нельзя использовать?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Mongooses util.toCollectionName генерирует имя коллекции на основе имени схемы.Он использует некоторые регулярные выражения, одним из которых является:

  [/(?:([^f])fe|([lr])f)$/gi, '$1$2ves'],

, который сопоставляет sa fe и заменяет его на sa ves .

источник

1 голос
/ 01 апреля 2019

Похоже, что они устанавливают правило для слов, заканчивающихся на "fe", потому что они обычно преобразуются во множественное число как "ves" (нож -> ножи).

Вы можете установить собственное имя коллекции, добавив в схему еще один аргумент:

const safeSchema = new Schema({ name: String }, { collection: 'safes' })
...