我可以根据条件数组在运行时在 Couchbase Lite swift 中创建 Where 子句吗?

Can I create Where clause in Couchbase Lite swift on runtime from array of conditions?

我正在使用 Couchbase Lite 2.6, 我想在运行时构建我的查询,我通过 API 收到条件列表(["Key":"value"]),我需要使用它来过滤我的本地数据库并显示值。

有什么方法可以使用 QueryBuilder 来实现吗?

我在 Couchbase 论坛上发现了类似的讨论,但它已经很老了,所以解决方案不再有效。

https://forums.couchbase.com/t/filter-on-array-filed-in-couchbase-and-couchbase-lite/3983/4

让我举一个 android 的例子,你可以将其推断为 swift:

    String name = "foo";
    String surname = "bar";
    Expression ex = Expression.property("type").equalTo(Expression.string("user"));
    if(name != null) {
        ex.and(Expression.property("name").equalTo(Expression.string(name)));
    }

    if(surname != null) {
        ex.and(Expression.property("surname").equalTo(Expression.string(surname)));
    }

    Query query = QueryBuilder
            .select(SelectResult.all())
            .from(DataSource.database(DatabaseManager.getDatabase()))
            .where(ex)
            .limit(Expression.intValue(10));

因为这个问题是针对 Swift 的,所以最好在 swift 中找到答案: 它与@deniswsrosa 提到的代码相同,但在 siwft 中。

  let name = "foo";
    let surname = "bar";
    let ex = Expression.property("type").equalTo(Expression.string("user"));
    if(name != nil) {
        ex.and(Expression.property("name").equalTo(Expression.string(name)));
    }

    if(surname != nil) {
        ex.and(Expression.property("surname").equalTo(Expression.string(surname)));
    }

    let query = QueryBuilder
            .select(SelectResult.all())
            .from(DataSource.database(DatabaseManager.getDatabase()))
            .where(ex)
            .limit(Expression.int(10));