我有两个集合,如follwoing,
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似乎不支持使用函数调用或局部变量进行查询。
答案 0 :(得分: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"))