2

我使用 ReactiveMongo 的查询:

collection
  .find(
    Json.obj("relateds" -> Json.obj("$elemMatch" -> activityRelated)),
    Json.obj("subscriberId" -> 1, "_id" -> 0)
  )
  .cursor[BSONObjectID]
  .collect[Seq]()

这意味着为每个找到的文档只返回一个字段“subscriberId”。最终的输出类型应该是 Future[Seq[BSONObjectID]]

但它失败了:

失败(java.lang.RuntimeException: JsError(List((,List(ValidationError(unhandled json value,WrappedArray()))))))

任何想法如何做到这一点?

提前致谢

4

1 回答 1

2

此查询的响应是对象序列,而不是值:

{ subscriberId : "foo" }

因此,您需要为此 id 定义具有单个字段的案例类,然后将光标类型设置为此案例类或尝试类似的操作:

collection
  .find(
     Json.obj("relateds" -> Json.obj("$elemMatch" -> activityRelated)),
     Json.obj("subscriberId" -> 1, "_id" -> 0)
  )
  .cursor[JsValue]
  .collect[Seq]() 
  .map(_.map(_.\("subscriberId").as[BSONObjectID]))
于 2014-04-30T13:57:15.063 回答