Создание нескольких индексов, один из которых уникален в Mongo.

Это продолжение создания нескольких индексов одновременно, где я сейчас использую следующие команды

db.test_collection_data.createIndex({"uId" : 1, "name" : 1}, {unique : 1})
db.test_collection_data.createIndex({"uId" : "hashed"})
db.test_collection_data.createIndex({"uId" : 1, "products" : 1})
db.test_collection_data.createIndex({"bId" : 1})

Я хочу понять, как правильно преобразовать это в одну команду, которая будет выполняться на сервере. Мои неудачные попытки заключаются в следующем:

#uniqueness is lost for the first index
db.test_collection_data.createIndexes(
   [
     {"uId" : 1,"name":1},
     {"uId" : "hashed"},
     {"uId" : 1,"products":1},
     {"bId" : 1}
   ]
)


#unable to create since products are not really unique
db.test_collection_data.createIndexes(
   [
     {"uId" : 1,"name":1},
     {"uId" : "hashed"},
     {"uId" : 1,"products":1},
     {"bId" : 1}
   ],
   {
     unique: true
   }
)

person Naman    schedule 22.01.2021    source источник
comment
... и что не так с выполнением операторов создания индекса один за другим в отдельных вызовах?   -  person Tim Biegeleisen    schedule 22.01.2021
comment
@TimBiegeleisen Я не хотел сообщать что-то неправильное, скажем так, но чтобы покончить с созданием индексов, иногда требовалось почти несколько часов на каждый индекс (почти вариант использования переиндексации) за один раз (один экран), а затем отслеживать ход всех сразу.   -  person Naman    schedule 22.01.2021


Ответы (1)


Это продолжение построения нескольких индексов одновременно,

Существует ответ со ссылкой на createIndexes. Команда createIndexes принимает форму runCommand: вы можете использовать, синтаксис и пример,

  • измените настоящее имя базы данных в Your database name и имя коллекции в test_collection_data,
db.getSiblingDB("Your database name").runCommand(
  {
    createIndexes: "test_collection_data",
    indexes: [
        {
            key: {
                "uId": 1,
                "name": 1
            },
            unique : true,
            name: "_uId_name_"
        },
        {
            key: {
                "uId": "hashed"
            },
            name: "_uId_"
        },
        {
            key: {
                "uId": 1,
                "products": 1
            },
            name: "_uId_products_"
        },
        {
            key: {
                "bId": 1
            },
            name: "_bId_"
        }
    ]
  }
)
person turivishal    schedule 22.01.2021