$ Casbah的所有运营商

时间:2013-10-14 20:10:54

标签: casbah

您能否举例说明如何将$all运算符用于我的两个elemMatch个对象?

val elemMatch1 = foo()
val elemMatch2 = bar()

如何执行$all( elemMatch1, elemMatch2)的查询(elemMatch1和elemMatch2的所有文件)?

1 个答案:

答案 0 :(得分:1)

我不确定混合$all$elemMatch有多大意义,但是文档$all如下:

{ <field>: { $all: [ <value> , <value1> ... ] }

$ elemMatch如下:

{ array: { $elemMatch: <document> } }

不幸的是,casbah DSL无法提供帮助,因为$all需要一个列表而$elemMatch需要一个字符串,所以你必须手动构建文档:

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

coll += MongoDBObject("array" -> List(
            MongoDBObject("value1" -> 1, "value2" -> 0),
            MongoDBObject("value1" -> 1, "value2" -> 2)
        ))

val elemMatch = MongoDBObject("$elemMatch" -> MongoDBObject("value1" -> 1, "value2" -> 2))
val query = "array" $all List(elemMatch)

coll.find(query).count