1

我有两个系列,如下所示,

customers:
  {id: 1, name: "foo"}
  {id: 2, name: "bar"}
  {id: 3, name: "baz"}

flags:
  {cid: 1}
  {cid: 3}

然后检索标志打开的客户

db.customers.find({id: {$in: db.flags.distinct("cid", {})}})

在 shell 上这是可行的,但我不能使用 casbah 做同样的事情,因为 casbah 似乎不支持使用函数调用或局部变量进行查询。

4

1 回答 1

3

当然,您可以在 casbah 中执行此操作 - 请记住db.flags.distinct返回一个应隐式转换为列表以供在$in. 这是一个测试示例:

import com.mongodb.casbah.Imports._
val db = MongoClient()("casbahTest")
val customers = db("customers")
val flags = db("flags")

customers.drop()
flags.drop()

// Add some customers
customers += MongoDBObject("_id" -> 1, "name" -> "foo")
customers += MongoDBObject("_id" -> 2, "name" -> "bar")
customers += MongoDBObject("_id" -> 3, "name" -> "baz")

// Add some flags
flags += MongoDBObject("cid" -> 1)
flags += MongoDBObject("cid" -> 3)


// Query
// In JS: db.customers.find({id: {$in: db.flags.distinct("cid", {})}})

// Long hand:
customers.find(MongoDBObject("_id" -> MongoDBObject("$in" -> flags.distinct("cid"))))

// Using Casbahs query dsl to build the MongoDBObject:
customers.find("_id" $in flags.distinct("cid"))
于 2013-07-11T10:18:42.177 回答