Skip to content

Commit 3be5342

Browse files
committed
MongoIndex add properties
1 parent 8ac08d3 commit 3be5342

File tree

6 files changed

+48
-51
lines changed

6 files changed

+48
-51
lines changed

src/main/scala/com/sfxcode/nosql/mongo/database/CollectionInfo.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@ package com.sfxcode.nosql.mongo.database
33
import java.util.Date
44

55
import org.mongodb.scala.bson.Document
6+
import com.sfxcode.nosql.mongo._
67

78
case class CollectionInfo(
89
name: String,
910
collectionType: String,
1011
fetched: Date,
11-
document: Document
12+
map: Map[String, Any]
1213
)
1314

1415
object CollectionInfo {
1516

1617
def apply(document: Document): CollectionInfo = {
1718
val name = document.getString("name")
1819
val collectionType = document.getString("type")
19-
CollectionInfo(name, collectionType, new Date(), document)
20+
CollectionInfo(name, collectionType, new Date(), document.asPlainMap)
2021
}
2122
}

src/main/scala/com/sfxcode/nosql/mongo/database/CollectionStatus.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import java.util.Date
44

55
import com.sfxcode.nosql.mongo._
66
import org.mongodb.scala.bson.Document
7+
import com.sfxcode.nosql.mongo._
78

89
case class CollectionStatus(
910
ns: String,
@@ -18,7 +19,7 @@ case class CollectionStatus(
1819
totalIndexSize: Int,
1920
ok: Int,
2021
fetched: Date,
21-
document: Document
22+
map: Map[String, Any]
2223
)
2324

2425
object CollectionStatus {
@@ -37,7 +38,7 @@ object CollectionStatus {
3738
map.getOrElse("totalIndexSize", 0).asInstanceOf[Int],
3839
map.getOrElse("ok", 0).asInstanceOf[Double].toInt,
3940
new Date(),
40-
document
41+
map
4142
)
4243
}
4344
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package com.sfxcode.nosql.mongo.database
22

33
import java.util.Date
4+
import com.sfxcode.nosql.mongo._
45

56
import org.mongodb.scala.bson.Document
67

7-
case class DatabaseInfo(name: String, sizeOnDisk: Double, empty: Boolean, fetched: Date, document: Document)
8+
case class DatabaseInfo(name: String, sizeOnDisk: Double, empty: Boolean, fetched: Date, map: Map[String, Any])
89

910
object DatabaseInfo {
1011

1112
def apply(document: Document): DatabaseInfo = {
1213
val name = document.getString("name")
1314
val sizeOnDisk = document.getDouble("sizeOnDisk")
1415
val empty = document.getBoolean("empty")
15-
DatabaseInfo(name, sizeOnDisk, empty, new Date(), document)
16+
DatabaseInfo(name, sizeOnDisk, empty, new Date(), document.asPlainMap)
1617

1718
}
1819
}

src/main/scala/com/sfxcode/nosql/mongo/database/MongoIndex.scala

Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package com.sfxcode.nosql.mongo.database
22

3+
import java.util.Date
4+
35
import com.sfxcode.nosql.mongo.operation.ObservableIncludes
46
import org.mongodb.scala.ListIndexesObservable
57
import org.mongodb.scala.model.IndexOptions
68

79
case class MongoIndex(
810
name: String,
9-
key: String,
10-
ascending: Int,
11+
fields: List[String],
12+
unique: Boolean,
1113
version: Int,
1214
namespace: String,
13-
keys: Map[String, Any] = Map(),
15+
keys: Map[String, Any],
16+
weights: Map[String, Any],
1417
expire: Boolean,
15-
expireAfterSeconds: Long = -1,
16-
text: Boolean
18+
expireAfterSeconds: Long,
19+
text: Boolean,
20+
fetched: Date,
21+
map: Map[String, Any]
1722
)
1823

1924
object MongoIndex extends ObservableIncludes {
@@ -31,48 +36,38 @@ object MongoIndex extends ObservableIncludes {
3136
fieldName: String,
3237
maxWait: Int = DefaultMaxWait
3338
): Boolean =
34-
convertIndexDocumentsToMongoIndexList(listIndexesObservable, maxWait).exists(index => index.key == fieldName)
39+
convertIndexDocumentsToMongoIndexList(listIndexesObservable, maxWait).exists(index =>
40+
index.fields.contains(fieldName)
41+
)
3542

3643
def convertIndexDocumentsToMongoIndexList(
3744
listIndexesObservable: ListIndexesObservable[Map[String, Any]],
3845
maxWait: Int = DefaultMaxWait
3946
): List[MongoIndex] = {
4047
var result = List[MongoIndex]()
41-
try {
42-
result = listIndexesObservable
43-
.resultList(maxWait)
44-
.map(indexOptions =>
45-
MongoIndex(
46-
indexOptions("name").toString, {
47-
if (indexOptions.contains("textIndexVersion")) {
48-
indexOptions("name").toString.substring(0, indexOptions("name").toString.indexOf("_"))
49-
}
50-
else {
51-
indexOptions("key").asInstanceOf[Map[String, _]].head.asInstanceOf[(String, Int)]._1
52-
}
53-
}, {
54-
if (indexOptions.contains("textIndexVersion")) {
55-
indexOptions("textIndexVersion").toString.toInt
56-
}
57-
else {
58-
val value = indexOptions("key").asInstanceOf[Map[String, _]].head._2.toString
59-
if (value.matches("[0-9]")) {
60-
value.toInt
61-
}
62-
else {
63-
0
64-
}
65-
}
66-
},
67-
indexOptions("v").toString.toInt,
68-
indexOptions("ns").toString,
69-
indexOptions("key").asInstanceOf[Map[String, _]],
70-
indexOptions.get("expireAfterSeconds").isDefined,
71-
indexOptions.getOrElse("expireAfterSeconds", -1).toString.toLong,
72-
indexOptions.contains("textIndexVersion")
73-
)
48+
try result = listIndexesObservable
49+
.resultList(maxWait)
50+
.map(indexOptions =>
51+
MongoIndex(
52+
indexOptions("name").toString,
53+
if (indexOptions.contains("textIndexVersion")) {
54+
indexOptions.getOrElse("weights", Map()).asInstanceOf[Map[String, _]].keys.toList
55+
}
56+
else {
57+
indexOptions.getOrElse("key", Map).asInstanceOf[Map[String, _]].keys.toList
58+
},
59+
indexOptions.getOrElse("unique", false).asInstanceOf[Boolean],
60+
indexOptions.getOrElse("v", -1).asInstanceOf[Int],
61+
indexOptions.getOrElse("ns", "").toString,
62+
indexOptions.getOrElse("key", Map).asInstanceOf[Map[String, _]],
63+
indexOptions.getOrElse("weights", Map()).asInstanceOf[Map[String, _]],
64+
indexOptions.contains("expireAfterSeconds"),
65+
indexOptions.getOrElse("expireAfterSeconds", -1).toString.toLong,
66+
indexOptions.contains("textIndexVersion"),
67+
new Date(),
68+
indexOptions
7469
)
75-
}
70+
)
7671
result
7772
}
7873

src/main/scala/com/sfxcode/nosql/mongo/operation/Base.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,6 @@ abstract class Base[A]()(implicit ct: ClassTag[A]) extends LazyLogging {
7878

7979
def indexForName(name: String): Option[MongoIndex] = indexList.find(_.name.equals(name))
8080

81-
def hasIndexForField(fieldName: String): Boolean = indexList().exists(index => index.key.equals(fieldName))
81+
def hasIndexForField(fieldName: String): Boolean = indexList().exists(index => index.fields.contains(fieldName))
8282

8383
}

src/test/scala/com/sfxcode/nosql/mongo/operation/IndexSpec.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ class IndexSpec extends PersonSpecification {
2020

2121
val mongoIndex: MongoIndex = list.head
2222
mongoIndex.name mustEqual "_id_"
23-
mongoIndex.key mustEqual "_id"
24-
mongoIndex.ascending mustEqual 1
23+
mongoIndex.fields must contain("_id")
2524
mongoIndex.namespace mustEqual "simple-mongo-unit-test.people"
2625
mongoIndex.version mustEqual 2
2726
mongoIndex.keys must haveSize(1)
@@ -117,8 +116,8 @@ class IndexSpec extends PersonSpecification {
117116

118117
PersonDAO.indexList must haveSize(2)
119118

120-
val indes: MongoIndex = PersonDAO.indexForName("email_1").get
121-
indes.expire must beTrue
119+
val index: MongoIndex = PersonDAO.indexForName("email_1").get
120+
index.expire must beTrue
122121

123122
PersonDAO.dropIndexForName(createIndexResult).result()
124123

0 commit comments

Comments
 (0)