慕哥6287543
2022-06-09 11:12:43
我正在使用 Express 和 MongoDB 開發(fā) NodeJS 應(yīng)用程序。我的對象沒有保存到數(shù)據(jù)庫中,所以我深入挖掘,發(fā)現(xiàn)如果我使用以下方法,則沒有創(chuàng)建目標(biāo)集合:const PersonSchema = new Schema({ firstName: String,});如果我使用了該集合,則創(chuàng)建該集合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創(chuàng)建集合之外還需要一個唯一的字段?
1 回答

慕桂英4014372
TA貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊
我剛剛嘗試使用幾乎相同版本的 mongoose 和 MongoDB 復(fù)制您在上面描述的場景,它工作正常,創(chuàng)建(和保存)文檔而沒有firstName
架構(gòu)中字段的唯一屬性。我認(rèn)為您的對象未保存在數(shù)據(jù)庫中的原因不是因為缺少唯一屬性。
此外,在沒有唯一屬性的情況下無法創(chuàng)建集合的原因是 mongoose(或 MongoDB 本身)在您將數(shù)據(jù)插入集合之前不會創(chuàng)建集合。通過添加唯一屬性,MongoDB 將不得不為集合中的該屬性創(chuàng)建一個索引文檔,從而將數(shù)據(jù)添加到集合中,這就是為什么看起來只有在添加唯一屬性之后才創(chuàng)建集合的原因。因此,雖然db.<collectionName>.find({}
) 可能什么都不返回,db.<collectionName>.getIndexes()
但會給你一些東西。
添加回答
舉報
0/150
提交
取消