你好,史塔克弗莱!
我遇到了一个奇怪的问题:猫鼬创建了一个名为“保险箱”的集合。
下面是我的示例代码:
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'))当我打开数据库shell并发出以下命令时:
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" ]现在,我试图创建一个集合名为“保险箱”的模型,而猫鼬似乎把它从safes > saves .
猫鼬有某种保护模型不能使用吗?
发布于 2019-04-01 20:33:31
似乎他们对以"fe“结尾的单词设置了一条规则,因为它们通常转换为"ves”复数(刀->刀)。
可以通过向Schema添加另一个参数来设置自己的集合名称:
const safeSchema = new Schema({ name: String }, { collection: 'safes' })发布于 2019-04-01 20:42:12
Mongooses util.toCollectionName根据架构名称生成集合的名称。它确实使用了一些正则表达式,其中之一是:
[/(?:([^f])fe|([lr])f)$/gi, '$1$2ves'],这样机器就安全了,用保存代替了它。
https://stackoverflow.com/questions/55462708
复制相似问题