Node.js 如何从Mongoose获取已定义的索引

Node.js 如何从Mongoose获取已定义的索引,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,我一直在试图找出已经通过MongoDB手动创建的索引(我已经通过mongobooster为两个字段创建了2d sphere索引,并通过定义模式创建了一个)。现在如果我在mongodbooster中运行这个查询 db.collectionname.getIndexes(); 它向我显示了3个名为name.key的文档,以及我使用的索引。我想在mongoose中执行相同的操作,但找不到相同的查询。我试过这个 const indexes = OrderSchema.indexes(); conso

我一直在试图找出已经通过MongoDB手动创建的索引(我已经通过mongobooster为两个字段创建了2d sphere索引,并通过定义模式创建了一个)。现在如果我在mongodbooster中运行这个查询

db.collectionname.getIndexes(); 
它向我显示了3个名为name.key的文档,以及我使用的索引。我想在mongoose中执行相同的操作,但找不到相同的查询。我试过这个

const indexes = OrderSchema.indexes();
console.log('index:', indexes);

但它只给了我一个索引,我在模式中定义了这个索引,它是_id,我还需要另外两个字段,它包含2d球体索引,我怎样才能得到它呢。我在这里试图实现的是,如果已经创建了2d球体索引,那么不要创建索引,否则创建一个我在这里试图实现的索引。非常感谢您提供的任何帮助。

是的,您不能使用模式。首先需要创建模型,然后可以执行以下操作:

Order.collection.getIndexes({full: true}).then(indexes => {
    console.log("indexes:", indexes);
    // ...
}).catch(console.error);

如果您无法访问mongoose模型,但mongoose连接已创建,您需要从集合中获取索引,您可以通过以下方式访问:

const mongoose = require('mongoose');
mongoose.connect('myConnectionString', { useNewUrlParser: true }).then(() => {
    getIndexes();
}); 

const getIndexes = async () => {
    const indexes = await mongoose.connection.db.collection('myCollection').
    indexes.forEach(function (index) {
        console.log(JSON.stringify(index));
    });
};
请参阅此链接