Расширенные запросы - частичное совпадение - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь найти лучший способ запроса очень изменчивых данных в базе данных Cloudant / CouchDB.Единственный способ объяснить это - показать пример:

Пример базы данных

    {
        "_id": "1",
        "query-able_values": {
            "value-type-b": "some value",
            "value-type-c": "some other value",
            "value-type-d": "another value",
            "value-type-f": "yet another value",
        }
    }

    {
        "_id": "2",
        "query-able_values": {
            "value-type-a": "value",
            "value-type-c": "some other value",
            "value-type-d": "another value"
        }
    }

    {
        "_id": "3",
        "query-able_values": {
            "value-type-a": "some value",
            "value-type-e": "some other one",
        }
    }

Пример запроса

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

    "selector": {
        "query-able_values.value-type-a": "value",
        "query-able_values.value-type-b": "a value not present in the database",
        "query-able_values.value-type-c": "some other value",
        "query-able_values.value-type-d": "another value",
        "query-able_values.value-type-e": "a value not present in the database",
        "query-able_values.value-type-f": "a value not present in the database"
    }

Что мне нужно изменить, чтобы запрос попадал в запись базы данных с идентификатором 2?

РЕДАКТИРОВАТЬ Я не совсем понял в своем первоначальном вопросе.Пользователь абсолютно не зависит от того, что находится в базе данных и, следовательно, какие значения имеют значение.У пользователя просто есть значения от a до f .Я пытаюсь найти способ получить "самую подходящую запись в базе данных".

1 Ответ

0 голосов
/ 24 сентября 2019

В соответствии с синтаксисом селектора CouchDB это можно записать следующим образом.

"selector": {
    "query-able_values": {
        "value-type-a": "value",
        "value-type-b": { "$exists": false },
        "value-type-c": "some other value",
        "value-type-d": "another value",
        "value-type-e": { "$exists": false },
        "value-type-f": { "$exists": false }
    }
}

или с явным оператором равенства.

"selector": {
    "query-able_values": {
        "value-type-a": { "$eq": "value"},
        "value-type-b": { "$exists": false },
        "value-type-c": { "$eq": "some other value"},
        "value-type-d": { "$eq": "another value"},
        "value-type-e": { "$exists": false },
        "value-type-f": { "$exists": false }
    }
}
...