我正在使用 Express 和 MongoDB 开发 NodeJS 应用程序。我的对象没有保存到数据库中,所以我深入挖掘,发现如果我使用以下方法,则没有创建目标集合:const PersonSchema = new Schema({ firstName: String,});如果我使用了该集合,则创建该集合const PersonSchema = new Schema({ firstName: { type: String, unique: true},});在任何一种情况下,完整的模型server/models/person.js都是:'use strict';const mongoose = require('mongoose');const Schema = mongoose.Schema;// Use native promises.mongoose.Promise = global.Promise;// Define the Person schema.const PersonSchema = new Schema({ // ...});const Person = mongoose.model('Person', PersonSchema);module.exports = Person;我有 MongoDB 4.2.3(db.version()在 mongo shell 中)、npm 6.14.4、mongoose 5.7.5 和 npm mongodb 3.3.2(在 mongo shell 中npm list | grep mongodb)。为什么MongoDB除了_id创建集合之外还需要一个唯一的字段?
1 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
我刚刚尝试使用几乎相同版本的 mongoose 和 MongoDB 复制您在上面描述的场景,它工作正常,创建(和保存)文档而没有firstName架构中字段的唯一属性。我认为您的对象未保存在数据库中的原因不是因为缺少唯一属性。
此外,在没有唯一属性的情况下无法创建集合的原因是 mongoose(或 MongoDB 本身)在您将数据插入集合之前不会创建集合。通过添加唯一属性,MongoDB 将不得不为集合中的该属性创建一个索引文档,从而将数据添加到集合中,这就是为什么看起来只有在添加唯一属性之后才创建集合的原因。因此,虽然db.<collectionName>.find({}) 可能什么都不返回,db.<collectionName>.getIndexes()但会给你一些东西。
添加回答
举报
0/150
提交
取消
