我想检查MongoDB集合是否为空。
我知道此方法有效:
if (client.getDatabase(dbName).getCollection(collectionName) == 0)
使用这种方法,我正在计算整个馆藏。这花费的时间是昂贵的。还有另一种更省时的方法吗?
答案 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