2013-10-14 66 views
0

您能否给我举一个例子,说明如何在我的两个elemMatch物件上使用$all运营商?

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

我怎么能执行$all(elemMatch1, elemMatch2)查询(所有文件,其中elemMatch1和elemMatch2)?

回答

1

我不知道它让多少意义的混合$all$elemMatch但是从文档$all如下:

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

$ elemMatch如下:

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

不幸的是,卡斯巴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