【问题标题】:Mongodb Index Creation only if not already exists仅当不存在时才创建 Mongodb 索引
【发布时间】:2020-04-14 10:52:54
【问题描述】:

是否有我可以通过 mongo shell 中的 javascript 使用的命令来检查特定索引是否存在于我的 mongodb 中。我正在构建一个将创建索引的脚本文件。我希望如果我多次运行此文件,则不会重新创建已经存在的索引。 我正在考虑使用它,它会工作吗:

if(db.collection.getIndexes().find({'name':'index_name'}).count()==0) { 
    db.collection.createIndex( { abc: 1, def: 1 } , { name: "index_name" } ) 
}

或者,有没有更好的方法来做到这一点? 另外,如果上面的代码是错误的,请帮我完成这个任务。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    我不确定首先检查是否有好处,除非您打算缓存该响应。

    当你调用db.collection.createIndex时,它不会重新创建已经存在的索引,它会返回ok:1"note" : "all indexes already exist"

    这将使用与调用db.collection.getIndexeslistIndexes 数据库命令相同的数据库锁。首先检查索引是否存在或只是尝试创建它没有太大区别。

    【讨论】:

    • 那么请给我一个解决方案来完成这个任务。
    • 运行db.collection.createIndex,让数据库决定是否创建。
    • 上述答案是否也适用于 TTL 索引?如果应用程序为已经可用的 TTL 索引调用 CreateIndex,但设置了不同的 ExpirationTime,会发生什么情况?
    • 如果索引已经存在但有与请求不同的选项,无论是过期还是其他选项,它都会返回ok:0,并带有消息“已经存在不同的选项”
    猜你喜欢
    • 2011-04-12
    • 2011-09-03
    • 2017-11-16
    • 2011-05-05
    • 2021-04-14
    • 1970-01-01
    • 2012-10-05
    • 2018-04-03
    • 2014-05-31
    相关资源
    最近更新 更多