2013-10-03 120 views
1

對於這個文檔結構:

_id: 1, records : [{n : "Name", v: "Will"}]

我怎麼能執行從卡斯巴一個$elemMatch蒙戈外殼查詢?

db.coll.find({records : {$elemMatch : {n: : "Name", v : "Will"} } })

我想這從卡斯巴代碼的測試directory,但我得到0的結果。

var builder = MongoDBObject() 
val elemMatch = "records" $elemMatch (MongoDBObject 
             ("n" -> "Name", "v" -> "Will")) 
builder = builder ++ elemMatch 
collection.find(builder) 

我得到collection.find(builder)行的類型不匹配。

編輯爲編譯時錯誤提供了更多文本。

[error] found : collection.CursorType 
[error]  (which expands to) com.mongodb.casbah.MongoCursor 
[error] required: Int 
[error]   collection.find(MongoDBObject(), elemMatch) 
[error]      ^
[error] one error found 

全部要點 - https://gist.github.com/kman007us/6817354

+0

什麼蒙戈版本和卡斯巴版本您使用的? –

+0

Mongo 2.4.6&Casbah 2.6.3 –

+0

doh - 我忘了在我的scalatest方法的末尾加上'in' –

回答

2

即使世界一點點額外的包裝有那不是需要像builder - 繼承人清理例如:

import com.mongodb.casbah.Imports._ 
val coll = MongoClient()("test")("testB") 
coll.drop() 

coll += MongoDBObject("records" -> List(MongoDBObject("n" -> "Name", "v" -> "Will"), 
             MongoDBObject("n" -> "age", "v" -> 100))) 

val elemMatch = "records" $elemMatch MongoDBObject("n" -> "Name", "v" -> "Will") 
coll.find(elemMatch).count