Запрос плагина nativescript-couchbase

Я пытаюсь использовать nativescript-couchbase-plugin. Вот мой код:

whereArray.push({ property: "type_id", comparison: "equalTo", value: typeId });
return itemsDb.query({
     select: [],
     where: whereArray,
     order: [{property: "rating", direction: "desc"}],
     limit: this.PAGE_SIZE,
     offset: page * this.PAGE_SIZE
});

Все работает нормально: условие в предложении where, порядок, лимит и смещение. Но я хочу добавить что-то новое к своему условию, и я пытаюсь сделать это:

whereArray.push({ property: "title", comparison: "like", value: "some name"});
or
whereArray.push({ property: "filters", comparison: "in", value: [1,2,3]});

И эти дела не работают. Никто из них. Работает только первый вариант с type_id.

Итак, вопрос в том, как использовать массив where для запроса соответствующих данных?

Образец данных:

{
    "type_id": 2,
    "title": "some name",
    "regionId": 372,
    "uid": 16177,
    "filters": [
        1,
        2,
        3
    ]
},

P.S. В исходном репозитории есть ошибка. Но в нем нет никакой активности.


person AxelPAL    schedule 04.03.2020    source источник
comment
Можете ли вы также опубликовать некоторые образцы данных/документов, чтобы помочь нам лучше понять запрос?   -  person Manoj    schedule 04.03.2020
comment
Я обновил сообщение с некоторыми моими примерными данными.   -  person AxelPAL    schedule 05.03.2020


Ответы (1)


Я должен согласиться, что документация плагина могла бы быть лучше. Но если вы просмотрите объявление TypeScript, вы обнаружите проблему с вашим кодом.

Когда вы добавляете несколько условий where, вы должны включать логический оператор.

 import {
    Couchbase,
    QueryLogicalOperator,
    QueryComparisonOperator
 } from "nativescript-couchbase-plugin";


const database = new Couchbase("my-database");

// Insert docs for testing
const documentId = database.createDocument({
    type_id: 2,
    title: "some name",
    regionId: 372,
    uid: 16177,
    filters: [1, 2, 3]
});
console.log(documentId); 

// Query
const results = database.query({
    select: [],
    where: [
        {
            property: "type_id",
            comparison: "equalTo",
            value: 2,
            logical: QueryLogicalOperator.AND
        },
        {
            property: "filters",
            comparison: "in",
            value: [1, 2, 3]
        }
    ],
    order: [{ property: "rating", direction: "desc" }],
    limit: 10
});
console.log(results);
person Manoj    schedule 05.03.2020
comment
Я добавил это. И я решил свою проблему логическими операторами, но не подзапросом: я хочу искать только [1] в документе с фильтрами полей: [1, 2, 3]. Также я не нашел способа использовать нечеткий поиск через этот плагин. Я пробовал оператор «нравится» с * и без него. - person AxelPAL; 06.03.2020
comment
Я не уверен, что понимаю, что вы имеете в виду. После добавления логического оператора запросы в вашем OP работают. - person Manoj; 06.03.2020
comment
как насчет поиска подзапроса в Couchbase? - person AxelPAL; 09.03.2020
comment
Внимание: логический оператор должен стоять на ВТОРОМ условии! (По крайней мере у меня так работало только так - на Nativescript-vue - Android) - person ainos; 15.10.2020