2015-09-22 81 views
0

我想構建一個多字段查詢。多字段scala/casbah查詢

我的收集是由很多像下列文件:

{ 
    "_id" : ObjectId("5601711160b2abcf7ff24b46"), 
    "id_a" : "43d366a9-a39b-4d49-98ce-369739471b6b", 
    "id_thing" : -1, 
    "data" : { 
     "info1" : 36.0709427, 
     "date" : "2005-11-01T00:33:21.987+07:00", 
     "info2" : 24563.87148077 
    } 
} 

我沒有找到一種方式,scala查詢使用​​,對於對應於文件:id_thing -> -1data.info1 -> 36.0709427

注意:我不知道如何將ISODate推送到數據庫。

回答

1

您應該使用MongoDBObject形成查詢,並通過它來尋找方法,如如下:

//create mongo connection. This might be different in your case 
val server = MongoClientURI("mongodb://localhost:27017") 
private val client = MongoClient(server) 
val database = client(DATABASE) 
//This is what you require 
val collection = ScalaMongoFactory.database("collectionName") 
val cursor = collection.find(MongoDBObject("id_thing" -> -1,"data.info1" -> 36.0709427)).toList 

println("output: " + cursor) 

希望這對您有所幫助。

+0

謝謝。這裏是我現在要做的:'val q = MongoDBObject.newBuilder','q + =「id_thing」 - > -1','q + =「data.info1」 - > 36.0709427','val res = knowledge_db.find (q.result)'。但是,當我嘗試添加一些運算符時,它會拋出「類型不匹配」的錯誤,請參閱:q + =「data.info2」$ gte 2000'。我該如何添加一個運算符到我的查詢中? – wipman

+1

@wipman爲什麼使用'new Builder'方法和字符串形成查詢?沒有必要這樣做。您可以簡單地使用'com.mongodb.casbah.commons'包的'MongoDBObject'。如果你想查找'data.info'> 10,那麼只需使用'collection.find(MongoDBObject(「id_thing」 - > -1,「data.info1」 - > MongoDBObject(「$ gte」 - > 36.0709427))) .toList' – Vishwas

+0

再次感謝。最後一個問題:是否可以從'String'的'MongoDBObject',如:'MongoDBObject(operator_string - > val)'? – wipman