为什么Mongoose无法在MongoDB Atlas中创建索引?

时间:2018-10-05 11:49:10

标签: mongodb mongoose mongodb-atlas

我有一个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创建索引,并且可以很好地工作,并且可以从外壳创建索引。但是猫鼬由于某种原因未能通过此操作。

1 个答案:

答案 0 :(得分:2)

在使用猫鼬版本v5.0.16时,我遇到了同样的问题。但是,自从我更新到v5.3.6以来,它现在正在Mongo Atlas上为我创建(复合)索引。 (我只是用两个版本编写了一个示例应用程序,以验证是这种情况。)

我不确定哪个版本可以解决此问题,但是它在v5.0.16v5.3.6之间,而v5.3.6在这里工作。