我查询MongoDB上的元素并接收2个元素。 但我无法遍历CollectionSlice。 任何想法?
以下是代码:
let elements = database.getAllElements()
do {
try print("Received: \(elements.count()) elements")
} catch {
print(error)
}
for element in elements {
print(element) // ==> should print out the element
}
let documents: [Document] = Array(elements)
for document in documents {
print(document) // ==> should print out the document
}
输出: 收到:2个元素
// ==>没有元素或文档的打印输出
程序以退出代码结束:0
感谢您的帮助
答案 0 :(得分:0)
我找到了一个可能的解决方案:
我必须重置光标,如:
do {
try elements.reset()
} catch {
print(error)
}
但为什么我必须先将光标重置? 有人可以回答这个问题。
答案 1 :(得分:0)
MongoDB中的游标是查询的结果流。一旦耗尽,就没有更多的文档,这意味着重复迭代游标等于继续迭代。由于光标已耗尽,因此不再有结果。
重置光标有效地再次发送查询并流式传输这些结果。 迭代游标两次是不好的做法,最好只处理一次游标,因为这会对应用程序和数据库产生重大的性能影响。