如何从 Mongoose 获取定义的索引

Posted

技术标签:

【中文标题】如何从 Mongoose 获取定义的索引【英文标题】:How to get the defined indexes from Mongoose 【发布时间】:2018-05-31 17:11:29 【问题描述】:

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

db.collectionname.getIndexes(); 

它为我生成了 3 个带有 name.key 的文档以及我使用了哪些索引。我想在猫鼬中执行相同的操作,但找不到相同的等效查询。我试过这个

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

但它只给了我一个我在模式中定义的索引 _id 我还需要另外两个包含二维球体索引的字段我怎么能得到它。在这里想要实现的是,如果已经创建了 2d 球体索引,则不要创建索引,否则创建一个所有试图在这里实现的索引。任何帮助表示感谢谢谢

【问题讨论】:

查看此链接mongoosejs.com/docs/3.1.x/docs/… 【参考方案1】:

如果您无权访问 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));
    );
;

【讨论】:

【参考方案2】:

是的,你不能用架构来做到这一点。您需要先创建模型,然后您可以执行以下操作:

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

【讨论】:

以上是关于如何从 Mongoose 获取定义的索引的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:如何向模式添加动态索引?

Mongo (+Mongoose) 错误:无法找到 $geoNear 查询的索引

在 Mongoose 中使用“Ref”获取 mongo 数据时出现问题

如何从 mongoose 的 mongo 文档中返回一个数组?

Mongoose/Mongo:更新不保存

mongoose index