MySQL Document Store - Неверное значение аргумента при создании индекса

\help createIndex и официальные документы разные.

Я попытался следовать "руководству по оболочке", так как оно дало мне самое дальнее, но я все еще получаю:

db.col.createIndex("name", {"fields": [{"field": "name", "type": "TEXT"}, {"field": "name2", "type": "TEXT"}]})
Invalid value for argument 'fields[0].field' (MySQL Error 5017)

У моей коллекции есть и имя, и имя2, и я считаю, что это не имеет к этому никакого отношения.

db.col.find()
[
    {
        "_id": "00005bcdb19f0000000000000001",
        "a": [
            1,
            2
        ],
        "name": "chen",
        "name2": "chen"
    }
]
1 document in set (0.0034 sec)

Любая помощь будет оценена

0 ответов

Оказывается, что для "поля" в "полях" требуется JSONPath. Кроме того, TEXT потребует некоторой длины.

Официальной документации по этому вопросу крайне не хватает и даже есть некоторые явные ошибки. Я понял это только в ходе попытки сделать эквивалент NoSQL ALTER TABLE ADD UNIQUE INDEX some_index (field_one, field_two); который, кажется, не поддерживается.

В любом случае, попробуйте это:

db.col.createIndex(
    "name", {
        "fields": [
            {"field": "$.name", "type": "TEXT(64)"},
            {"field": "$.name2", "type": "TEXT(64)"}
        ]
    }
)

РЕДАКТИРОВАТЬ относительно уникальных индексов: если вы добавляете в коллекцию обычный индекс, а затем заходите в рабочую среду, удаляете только что созданный вами индекс и повторно добавляете его как уникальный индекс, который, похоже, работает. Но это только для одного поля.

РЕДАКТИРОВАТЬ относительно уникальных индексов компоновки: если вы создаете сгенерированный столбец, который объединяет два поля, которые вы хотите быть уникальными вместе, а затем применяете уникальный индекс к нему, это будет работать.

Другие вопросы по тегам