我想使用casbah执行查询,以便找到所有未设置某个字段的对象(该字段不存在)或该字段具有特定值。
我尝试过使用
val query = ("_id.serviceName" $in serviceNames) ++ ($or("element" $exists false), MongoDBObject("element" -> "value")))
但我收到错误:
found com.mongodb.casbah.commons.Imports.DBObject
required (String, Any)
是否可以表达此类查询? 感谢
答案 0 :(得分:4)
看起来这可能是$或的右侧值过滤器中的错误;它似乎不接受$ exists DSL语句中的预构建DBObject。它绝对应该 - 我在内部提交一个错误来解决这个问题;在此期间,您可以通过手工执行“$ exists”语句来构造它:
scala> val query = ("_id.serviceName" $in serviceNames) ++ ($or(("element" -> MongoDBObject("$exists" -> false)), ("element" -> "value")))
query: com.mongodb.casbah.commons.Imports.DBObject = { "$or" : [ { "element" : { "$exists" : false}} , { "element" : "value"}] , "_id.serviceName" : { "$in" : [ "foo" , "bar" , "baz" , "bah"]}}
很抱歉...我为此创建了一个bug entry来纠正下一个版本。