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”))但是我怎么能有任意数量的“或”大小写呢?