为何删除MongoDB集合时需在集合名后加‘s’?
关于Mongoose删除集合时要加"s"的问题解答
嘿,这个问题其实是Mongoose的默认命名约定在搞怪!我来给你掰扯清楚:
为什么集合名会自动加"s"?
Mongoose有个内置的默认行为——当你定义模型时,如果没有显式指定集合名称,它会自动把模型的单数名称转换成复数形式,来对应MongoDB里的集合。这是为了贴合MongoDB社区常见的命名习惯(比如用users而不是user,posts而不是post)。
举个例子,如果你是这么定义模型的:
const MyCollection = mongoose.model('myCollection', mySchema);
那Mongoose会自动把这个模型关联到复数的myCollections集合上,而不是你写的单数myCollection。这就是为什么你删除的时候需要用myCollections才能找到对应的集合。
两种解决方式任你选
1. 显式指定集合名(推荐)
在创建模型的时候,加上第三个参数直接指定集合名称,这样Mongoose就不会自动复数化了:
// 第三个参数就是你要关联的集合名,写单数的myCollection就行 const MyCollection = mongoose.model('myCollection', mySchema, 'myCollection');
之后你用mongoose.connection.collections.myCollection.drop()就能精准找到目标集合并删除了。
2. 直接用复数名称操作
如果你不想修改模型定义,那保持现有代码mongoose.connection.collections.myCollections.drop()也完全没问题——因为这就是Mongoose实际关联的集合名称,只要集合确实存在,就能正常删除。
小技巧:确认集合真实名称
要是你不确定MongoDB里到底有哪些集合,可以打开MongoDB Shell,输入show collections命令,就能看到所有集合的真实名称,一目了然!
内容的提问来源于stack exchange,提问作者Yasin Hajilou
相关产品推荐
相关产品推荐

