Scala如何有效地检查MongoDB集合是否为空?

时间:2019-06-07 21:08:25

标签: mongodb scala

我想检查MongoDB集合是否为空。

我知道此方法有效:

if (client.getDatabase(dbName).getCollection(collectionName) == 0)

使用这种方法,我正在计算整个馆藏。这花费的时间是昂贵的。还有另一种更省时的方法吗?

1 个答案:

答案 0 :(得分:0)

原始问题中发布的代码将不会检查集合是否为空。它将MongoCollection对象与Int对象进行比较,在这种情况下,该语句将始终求值为false。重新创建逻辑将导致以下警告消息:

warning: comparing values of types org.mongodb.scala.MongoCollection[org.mongodb.scala.bson.collection.immutable.Document] and Int using `==' will always yield false

尽管我不确定这是否是最有效或最标准的方法,但我过去使用了以下模式(特别是因为它使用var,这对于Scala来说是一种禁忌):

/* countDocuments() replaces deprecated count() in org.mongodb.scala 2.4
 * https://mongodb.github.io/mongo-scala-driver/2.4/scaladoc/org/mongodb/scala/MongoCollection.html 
 * https://mongodb.github.io/mongo-scala-driver/2.4/changelog/
 */

var isEmpty = true // your result will be stored here
var processing = true
val collection = client.getDatabase(dbName).getCollection(collectionName)
collection.countDocuments().subscribe((cnt: Long) => {
   isEmpty = (cnt == 0)
   processing = false
})
while(processing) {} // wait here until async call is completed