Проблема с cts.jsonPropertyScopeQuery и cts.jsonPropertyValueQuery с типами данных и порядком полей - PullRequest
0 голосов
/ 26 февраля 2020

В моей базе данных есть MarkLogi c 9.

В моей базе данных созданы следующие документы:

test1.json
{
    "users": [
        {
            "userId": "A", 
            "value": 0
        }
    ]
}

test2.json
{
    "users": [
        {
            "userId": "A", 
            "value": "0"
        }
    ]
}

test3.json
{
    "users": [
        {
            "value": 0, 
            "userId": "A"
        }
    ]
}

test4.json
{
    "users": [
        {
            "value": "0", 
            "userId": "A"
        }
    ]
}

Я запустил следующие коды и записал результаты :

cts.uris(“”, null, cts.jsonPropertyScopeQuery(
    "users",
    cts.andQuery(
        [
            cts.jsonPropertyValueQuery('userId', "A"),
            cts.jsonPropertyValueQuery('value', "0"),
        ]
    )   
))

Результат: test2. json, test4. json

cts.uris(“”, null, cts.jsonPropertyScopeQuery(
    "users",
    cts.andQuery(
        [
            cts.jsonPropertyValueQuery('userId', "A"),
            cts.jsonPropertyValueQuery('value', 0),
        ]
    )   
))

Результат: test3. json

Мне было интересно, почему test1 . json не возвращался во втором запросе, в то время как test3. json делал. Они оба имели одинаковые значения для полей, но в разном порядке. Порядок полей различается в test2. json и test4. json, однако запрос вернул оба документа. Единственное различие между двумя парами, о котором я могу подумать, состоит в том, что для поля «значение», целого числа и строки существует 2 типа данных.

Как бы я go решил эту проблему?

1 Ответ

0 голосов
/ 27 февраля 2020

https://docs.marklogic.com/cts.jsonPropertyValueQuery показывает значение для сопоставления в виде массива.

Если вы хотите сохранить варианты в данных, возможно, вы можете попробовать что-то на стороне запроса, например cts.jsonPropertyValueQuery ('value', ["0", 0])

...