Ios Couchbase lite N1QL:如何在数组中查询值数组

Ios Couchbase lite N1QL:如何在数组中查询值数组,ios,swift,couchbase-lite,n1ql,Ios,Swift,Couchbase Lite,N1ql,我有如下数据项: { "mydata": [ { "title": "item 1", "languages": [ "en", "fr", "it", "pl" ] }, { "title

我有如下数据项:

{
  "mydata": [
    {
      "title": "item 1",
      "languages": [
        "en",
        "fr",
        "it",
        "pl"
      ]
    },
    {
      "title": "item 2",
      "languages": [
        "fr",
        "es",
        "pt"
      ]
    },
    {
      "title": "item 3",
      "languages": [
        "en",
        "it"
      ]
    }
  ]
}
如何查询像[“en”,“it”]这样的数组中的项?它应该匹配语言中包含“en”或“It”(或两者)的所有数据元素


非常感谢您的帮助。

如果您已将文档存储在名为
test
存储桶中,此N1QL查询将检索其中您正在查找的项目:

select item 
from test unnest mydata item 
where "en" in item.languages OR "it" in item.languages

要运行此查询,您至少需要在bucket上有一个主索引。

有关收集操作的文档中有一些关于此主题的示例。

好的,我知道了如何执行此操作。对于任何感兴趣的人:

func getIdsByPropertyArray(_ property:String, values:[String]) -> Set<String> {
    var matchingIds = Set<String>()

    var whereExpr:ExpressionProtocol = ArrayFunction.contains(Expression.property(property), value:Expression.string(values[0]))
    for i in 1..<values.count {
       whereExpr=whereExpr.or(ArrayFunction.contains(Expression.property(property), value: Expression.string(values[i])))
    }

    let query = QueryBuilder
        .select(
            SelectResult.expression(Meta.id)
        )
        .from(DataSource.database(database))
        .where(whereExpr)
    do {
        for result in try query.execute() {
            matchingIds.insert(result.string(forKey: "id")!)
        }
    } catch let error {
        print(error.localizedDescription)
    }
    return matchingIds
}
func getIdsByPropertyArray(uProperty:String,values:[String])->Set{
var matchingIds=Set()
var whereExpr:ExpressionProtocol=ArrayFunction.contains(Expression.property(property),value:Expression.string(值[0]))

对于1中的i.。您的示例JSON应该是一个文档还是三个文档?另外,我注意到您标记了ios和swift。这个问题是针对couchbase服务器的(正如您标记的那样)或者couchbase lite?它是couchbase lite。我只是不能这样标记…JSON是一个文档。我认为您不能将原始N1QL字符串用于couchbase lite,至少现在还不能?代码必须是Swift格式的,比如:.select(SelectResult.expression(Meta.id)).from(DataSource.database(db)).where(ArrayFunction.contains(expression.property(“languages”),value:Expression.string(“en”))或(Expression.propertyArrayFunction.contains(Expression.property(“languages”)、value:Expression.string(“it”))但是我怎么能有任意数量的“或”大小写呢?