我正在使用MongoKitten库从mongoDB中获取文档。
我的mongoDB中有以下文档:
{
...
foo: ["A", "B"]
...
}
我可以查询db,但是我无法遍历返回文档的foo
数组。例如,假设我将查询结果保存到mongoDocs
。
for Doc in mongoDocs {
print(Doc["foo"] as Any) // prints ["A", "B"]
var tempFoos = [String]()
for foo in Doc["foo"] { // gives error: Type 'Value' does not conform to protocol "Sequence"
print("Foo: " + foo)
tempFoos.append(foo)
}
}
我理解错误。基本上,我的foo
数组不符合允许我循环它的Sequence协议。但是我该如何解决这个问题?
修改 - 这是我用来获取mongoDocs
的代码。我打印了结果并使用了其他属性。我似乎无法遍历这个数组。
mongoDocs = try self.geographiesCollection!.find(matching: q, projecting: projection, limitedTo: 100)
这是relevant function in the MongoKitten source code。该函数返回Cursor<Document>
答案 0 :(得分:3)
在这里,您可以查看框架开发人员如何解释处理这种情况。 MongoKitten closed issue 27
这里有一些他的解释引用,因为链接变得无效。
“订阅文档时,MongoKitten BSON库始终返回枚举(值)。”
“BSON数组实际上只是一个带有从0到x的键的文档,因此数组的枚举大小写有一个文档作为它的关联值。因为Value也可以是一个双重或一个日期,它不会' t符合序列协议。
迭代数组的最简单方法是使用Value上的文档便捷访问器。如果Value是数组或文档,则返回基础文档;如果是其他内容,则返回空文档。然后你可以像这样迭代:“
for (key, val) in doc["vals"].document {
print("Value is \(val)")
}
答案 1 :(得分:1)
将其转换为数组:
for Doc in mongoDocs {
guard let arr = Doc["foo"] as? [String] else { continue }
for foo in arr {
// do your things
}
}
答案 2 :(得分:0)