标签: casbah

使用Casbah将lift-json JValue转换为MongoDBObject?

我正在尝试将lift-json的JValue中的解析后的JSON文档转换为Casbah MongoDBObject - 有没有办法做到这一点?

mongodb casbah lift-json

5
推荐指数
1
解决办法
1278
查看次数

如何检索Mongodb集合中的所有对象,包括ids?

我正在使用CasbahSalat来创建我自己的Mongodb dao并且正在实现这样的getAll方法:

val dao: SalatDAO[T, ObjectId]    
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList 
Run Code Online (Sandbox Code Playgroud)

我想知道的是:

  1. 有没有更好的方法来检索所有对象?
  2. 当我遍历对象时,我找不到对象的_id.被排除在外吗?如何将其包含在列表中?

scala mongodb casbah salat

5
推荐指数
1
解决办法
3119
查看次数

Scala,Casbah - 如何将List转换为MongoDBList?

有没有一种简单的方法可以将List转换为MongoDBList(或BasicDBList)?

scala casbah

5
推荐指数
1
解决办法
1106
查看次数

没有隐式视图可用

当我试图DBObject通过插入批量加载一个列表时,我得到了no implicit view available.

collection.insert(listObjects) // listObjects is a List[DBObject]

[error]Test.scala:139: No implicit view available from List[com.mongodb.casba
h.Imports.DBObject] => com.mongodb.casbah.Imports.DBObject.
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?我怎么解决?

参考:

def insert [A] (docs: List[A])(implicit arg0: (A) ? DBObject) : WriteResult

scala implicit mongodb implicit-conversion casbah

4
推荐指数
1
解决办法
1722
查看次数

使用Play Json和Salat格式化可空的Seq或对象列表

我想将json转换为Salat模型.我正在使用Play 2.X Scala Json.我找不到任何格式化可空的Seq的文档.根据https://github.com/novus/salat/wiki/SupportedTypes,我不能使用Option [Seq]或Option [List].

以下json是好的,但有时"位置"可能会丢失.

{
    "id": 581407,
    "locations": [
        {
            "id": 1692,
            "tag_type": "LocationTag",
            "name": "san francisco",
            "display_name": "San Francisco"
        }]
}
Run Code Online (Sandbox Code Playgroud)

这些是类:

case class User(
 var id: Int,
 var locations: Seq[Tag] = Seq.empty
)

case class Tag(
  id: Int,
  tag_type:String,
  name:String,
  display_name:String
)
Run Code Online (Sandbox Code Playgroud)

如何格式化可空的"位置"?

implicit val format: Format[User] = (
    (__ \ 'id).format[Int] and
    (__ \ 'locations).formatNullable(Seq[Tag])
)
Run Code Online (Sandbox Code Playgroud)

json scala casbah salat playframework-2.2

4
推荐指数
1
解决办法
988
查看次数

MongoDB的Casbah&Rogue - 查询功能

我目前正在使用Casbah和MongoDB来实现Web服务.到目前为止我没有遇到任何问题.我也在使用Scala.

但是,我只是想知道是否有比Casbah更好的东西来做很多find/findOne类型的查询.

我遇到了Rogue,这是一种基于类型安全的基于Scala的DSL,它可以使查询更容易,更易读.

所以,我想知道转移到Rogue是否有用,这样随着Web服务项目变得更大,更复杂,Rogue对查询的支持可能会有所帮助?

只是想知道我是否应该继续或转向更好的东西.

scala mongodb casbah

3
推荐指数
1
解决办法
2957
查看次数

更新mongodb中的子对象

考虑在我的mongo集合中输入以下内容.

{
  "id" : "_0001",
  "map" : {
            "foo" : 1
          }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要在内部地图中添加一个条目.喜欢

{
  "id" : "_0001",
  "map" : {
            "foo" : 1,
            "bar" : 2,
          }
}
Run Code Online (Sandbox Code Playgroud)

map不是,list所以我不能$push在那里使用.有没有办法在mongo中这样做.而且我也通过casbah访问数据库.如果可以,请记下casbah代码.

注意: - 地图不应该是列表

mongodb casbah

3
推荐指数
1
解决办法
1632
查看次数

MongoDB Scala驱动程序-呈现BSON文档

当前,我们正在使用一种类型安全的查询语言,该自定义DSL允许我们轻松编写数据库查询,这些查询将被解释并转换为Mongo查询。

我们最近从Casbah换成了新的Mongo Scala驱动程序,并改写了我们的翻译。但是,在处理可选值时遇到一些问题。

这是一个示例查询:

dao.headOption(Order.id === orderId.some)
Run Code Online (Sandbox Code Playgroud)

订单对象上存储的类型是一个选项,因此我们也将提供的ID提升为一个选项。但是,每当我尝试以以下方式呈现生成的查询以用于调试以及测试用例时:

import org.mongodb.scala.bson.{BsonDocument, codecs}

query.toBsonDocument(BsonDocument.getClass, codecs.DEFAULT_CODEC_REGISTRY)
Run Code Online (Sandbox Code Playgroud)

最终引发以下异常:

Can't find a codec for class scala.Some.
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class scala.Some.
Run Code Online (Sandbox Code Playgroud)

我不确定如何纠正此问题,或者不确定是否需要为Option实现我自己的编解码器,并且如果我这样做,我也不知道该怎么做。

任何帮助将不胜感激。先感谢您

更新资料

我已经看到我可以尝试实现编解码器接口,如下所示:

http://mongodb.github.io/mongo-java-driver/3.0/bson/codecs/

我是否需要为Option的每种可能的子类型实现它?

示例Option [Int],Option [UUID],Option [List [String]]等。

scala codec mongodb bson casbah

3
推荐指数
1
解决办法
1144
查看次数

如何通过Casbah将带有list的scala对象转换为MongoDBObject

我正在通过编写一个简单的应用程序来学习MongoDB和Casbah.当我尝试将具有列表成员的对象转换为MongoDB对象时,卡住了.这是我的课

case class BorrowerRecord( name: String, checkedOut: List[BookTag]) {
  require(!name.isEmpty)
  require(!checkedOut.isEmpty)
}

case class BookTag (subject: Subject, bookName: String) {
  require(!bookName.isEmpty)
}

case class Subject (name: String, category: Category) {
  require(!name.isEmpty)  
}  
Run Code Online (Sandbox Code Playgroud)

类别是一个具有2个案例类实现的密封特征,我打算像"Enum"一样使用它

sealed trait Category {
  def name: String
}

object Category {
  case object Computing extends Category { val name = "Computing"}
  case object Math extends Category { val name = "Math"}
}
Run Code Online (Sandbox Code Playgroud)

因此,BorrowerRecord的一个实例将保留一个人从图书馆检出的书籍,每本书都由BookTag对象识别.BookTag保存有关书籍,主题名称,类别等书籍的一些信息.

让我说我有一个BorrowerRecord并希望将它保存到MongoDB

val borrowOnToday = BorrowerRecord( "My Name", List( BookTag(Subject("J2EE", Category.Computing), "Head First Java"), 
                                                     BookTag(Subject("Linear …
Run Code Online (Sandbox Code Playgroud)

scala mongodb casbah

2
推荐指数
1
解决办法
3989
查看次数

无法解决casbah作为sbt依赖

我在编译时遇到以下错误:

[error] (*:update) sbt.ResolveException: unresolved dependency: org.mongodb#casbah_2.11;2.7.4-SNAPSHOT: not found
Run Code Online (Sandbox Code Playgroud)

使用此build.sbt文件:

name := """play-scala"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayScala)

scalaVersion := "2.11.1"

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  ws
)

libraryDependencies += "org.mongodb" %% "casbah" % "2.7.4-SNAPSHOT"

// For stable releases
resolvers += "Sonatype releases" at "https://oss.sonatype.org/content/repositories/releases"

// For SNAPSHOT releases
resolvers += "Sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
Run Code Online (Sandbox Code Playgroud)

我正在使用Typesafe Activator并尝试了许多Casbah版本的组合(包括版本,而不是快照)和解析器."官方"MongoDB Casbah教程中安装说明也不起作用.有任何想法吗?

scala mongodb casbah

2
推荐指数
1
解决办法
1273
查看次数

使用casbah将一组字符串添加到现有集合

我有一个用户对象如下:

{ user: "joe", acks: ["a", "b" ] }
Run Code Online (Sandbox Code Playgroud)

我想在acks字段中添加一组字符串.这是我尝试通过一次更新来做到这一点:

def addSomeAcks(toBeAcked = Array[String])
    DB.getCollection("userAcks").update(
        MongoDBObject("user" -> "joe"), 
        $addToSet("acks") $each toBeAcked  
    )
}

def test() {
   addSomeAcks(Set("x", "y", "z"))
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到一个嵌入式集,如下所示:

{ user: "joe", acks: ["a", "b", ["x", "y", "z" ] ] }
Run Code Online (Sandbox Code Playgroud)

但我想要的结果是:

{ user: "joe", acks: ["a", "b", "x", "y", "z" ] }
Run Code Online (Sandbox Code Playgroud)

我可以通过调用每个项目的更新来使其工作toBeAcked,有没有办法在一个调用中执行此操作?

scala mongodb casbah

1
推荐指数
1
解决办法
279
查看次数

将MongoDBObject查询生成器与Salat一起使用

我试图提供一个API来搜索MongoDB集合的各种标准,包括全文搜索.由于这是一个Scala项目(在Play FWIW中),我使用的是Salat,一个围绕Casbah的抽象.

以下代码工作正常:

MySalatDao
.find(MongoDBObject("$text" -> MongoDBObject("$search" -> "Vidya")), MongoDBObject("score" -> MongoDBObject("$meta" -> "textScore")))
.sort(orderBy = MongoDBObject("score" -> MongoDBObject("$meta" -> "textScore")))
Run Code Online (Sandbox Code Playgroud)

但是,我最终需要搜索多个条件并按其全文搜索分数对结果进行排序,因此我探索了Casbah的MongoDBObject 查询构建器功能(在底部).

所以我试着像这样复制上面的内容:

val builder = MongoDBObject.newBuilder
builder += "$text" -> MongoDBObject("$search" -> "Vidya")
builder += "score" -> MongoDBObject("$meta" -> "textScore")
MySalatDao
.find(a.result())
.sort(orderBy = MongoDBObject("score" -> MongoDBObject("$meta" -> "textScore")))
Run Code Online (Sandbox Code Playgroud)

这给出了以下例外:

com.mongodb.MongoException: Can't canonicalize query: BadValue must have $meta projection for all $meta sort keys
  at com.mongodb.QueryResultIterator.throwOnQueryFailure(QueryResultIterator.java:214)
  at com.mongodb.QueryResultIterator.init(QueryResultIterator.java:198)
  at com.mongodb.QueryResultIterator.initFromQueryResponse(QueryResultIterator.java:176)
  at com.mongodb.QueryResultIterator.<init>(QueryResultIterator.java:64)
  at …
Run Code Online (Sandbox Code Playgroud)

scala mongodb casbah salat

1
推荐指数
1
解决办法
1670
查看次数