0

我在 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

感谢帮助

4

2 回答 2

0

我找到了一个可能的解决方案:
我必须重置光标,例如:

do {
  try elements.reset()
} catch {
  print(error)
}

但是为什么我必须首先重置光标?可能有人可以回答这个问题。

于 2018-06-12T06:38:03.003 回答
0

MongoDB 中的游标是查询的结果流。一旦耗尽,就没有更多的文档了,这意味着在游标上重新迭代等于继续迭代。由于光标已耗尽,因此没有更多结果。

重置游标有效地再次发送查询并流式传输这些结果。遍历游标两次是不好的做法,最好只处理一次游标,因为这将对应用程序和数据库产生重大的性能影响。

于 2018-06-15T13:58:29.623 回答