我在MongoDB golang sdk中使用多个goroutine从cursor读取文档。但是它没有返回所有文档。注意:它可以在单个goroutine下正常工作。
我想从多个goroutine中读取同一集合游标中的所有文档
示例代码:
cursor, err := coll.Find(context.TODO(), filter, opts)
if err != nil {
fmt.Println("Finding all documents ERROR:", err)
defer cursor.Close(ctx)
// If the API call was a success
} else {
// iterate over docs using Next()
for cursor.Next(ctx) {
...............
}
字符串
}
1条答案
按热度按时间liwlm1x91#
如果你有多个goroutine调用
cursor.Next
,那么当任何一个goroutine调用cursor.Next
时,光标将在所有的goroutine中前进。你可能想做的是有一个单独的goroutine用于阅读,但是你可以将结果传递给一个通道,然后你可以在一个单独的goroutine中处理每个文档。比如:字符串
然后,很明显,当你完成处理结果时,要确保退出你的goroutines。