我有一个Mongoose模式,其中包含具有特定索引的字段:
const reportSchema = new mongoose.Schema({
coords: {
type: [Number],
required: true,
index: '2dsphere'
},
…
}
它在我的本地计算机上运行良好,因此,当我通过外壳连接到MongoDB时,将得到db.reports.getIndexes()
的输出:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "weatherApp.reports"
},
{
"v" : 2,
"key" : {
"coords" : "2dsphere"
},
"name" : "coords_2dsphere",
"ns" : "weatherApp.reports",
"background" : true,
"2dsphereIndexVersion" : 3
}
]
然后,我将此应用程序部署到Heroku并连接到MongoDB Atlas,而不是本地数据库。它适用于保存和检索数据,但是不能创建索引(仅默认索引):
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "weatherApp.reports"
}
]
什么可能导致此问题? Atlas允许通过Web GUI创建索引,并且可以很好地工作,并且可以从外壳创建索引。但是猫鼬由于某种原因未能通过此操作。
答案 0 :(得分:2)
在使用猫鼬版本v5.0.16
时,我遇到了同样的问题。但是,自从我更新到v5.3.6
以来,它现在正在Mongo Atlas上为我创建(复合)索引。 (我只是用两个版本编写了一个示例应用程序,以验证是这种情况。)
我不确定哪个版本可以解决此问题,但是它在v5.0.16
和v5.3.6
之间,而v5.3.6
在这里工作。