标签: salat

为什么我的MongoDB同步$ push更新失败?

我正在对表单进行一些更新

update(
  { "uuid": someUuid, "revision.versionNumber": someVersionNumber},
  { "$set": { "meta.someId": someId }, "$push": { "meta.someMessages": someMessage } }
)
Run Code Online (Sandbox Code Playgroud)

有时我看的时候这就是所谓的相同uuid,versionNumber,及someId与不同的someMessage第一个更新将会成功,但第二个将静默失败.

我看到蒙戈日志下面,所以我知道该更新能够进入数据库,注意第一次更新具有相同的查询作为第三人,但第一个具有nupdated: 1而第三个具有nupdated: 0

Wed Aug 28 14:50:24 [conn18] update some-db.some_collection query: { uuid: "b841f303-a054-4eb9-8885-9d3ebf9906a1", revision.versionNumber: 9 } update: { $set: { meta.someId: "521e6fe4036420f90371a922" }, $push: { meta.someMessages: { event: "instance.complete", timestamp: new Date(1377726624985) } } } nscanned:2507 nmoved:1 nupdated:1 keyUpdates:0 numYields: 19 locks(micros) w:6010 9ms
Wed Aug 28 …
Run Code Online (Sandbox Code Playgroud)

scala mongodb casbah salat playframework-2.1

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

如何查询数组[String]的正则表达式匹配?

我尝试通过Casbah查询MongoDB的字段是一个带有正则表达式的字符串数组.

例如:

我有一个带有ips列表的Maschine,它们在字段ips中以字符串形式存储.现在我想搜索所有具有子网192.168的计算机.

对我来说,我看起来我无法查询应用于每个条目的regexp的数组,如果其中一个条目匹配,则返回该机器.

有什么方法可以进行这样的查询吗?

- 修正了

谢谢你的帮助.

现在一切都有效.最后我需要解决Casbah的一个限制,因为我需要加入查询$或者Casbah抱怨错误地使用regexp.

我的RegExp Array查询的最终代码包含另外一个字段:

val regexp = ".*" + parameter + ".*"
val nameQ = MongoDBObject("serverName" -> regexp.r)
val ipsQ = MongoDBObject("ips" -> regexp.r)
val bldr = MongoDBList.newBuilder
bldr += ipsQ
bldr += nameQ
val query = MongoDBObject("$or" -> bldr.result.asDBObject)
val result = find(query)
Run Code Online (Sandbox Code Playgroud)

它不是最好的代码,需要修复参数的字符串连接.但它的工作原理:)

scala mongodb casbah salat

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

播放框架Leon Salat模型表格映射

我正在使用Play框架和mongoDB创建一个scala应用程序.我设法使用Leon Play-Salat建立联系.我有一个模特

case class Person(
  id: ObjectId = new ObjectId,
  fname: String,
  mname: String,
  lname: String
)
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我需要将其映射到表单

val personForm: Form[Person] = Form(

// Defines a mapping that will handle Contact values
mapping(
  "id" -> of[ObjectId],
  "fname" -> nonEmptyText,
  "mname" -> text,
  "lname" -> nonEmptyText     
)(Person.apply)(Person.unapply))
Run Code Online (Sandbox Code Playgroud)

如何将ObjectID映射到表单?我收到错误ObjectId找不到Object.

mongodb salat playframework-2.0

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

如何使用ScalaTest测试基于Salat的方法

我正在使用Play 2,Salat(用于mongoDB bindin)编写一个Web应用程序.我想在课程模型中测试一些方法(例如测试我通过id检索正确课程的事实).问题是我不想用虚拟课程污染我当前的数据库.如何使用Salat和Scala测试使用假数据库?这是我的一个测试文件.它创建了两个课程,并将其插入到数据库中,并在其上运行一些测试.

LessonSpec extends FlatSpec with ShouldMatchers {
  object FakeApp extends FakeApplication()

  val newLesson1 = Lesson(
    title = "lesson1",
    level = 5,
    explanations = "expl1",
    questions = Seq.empty)
  LessonDAO.insert(newLesson1)

  val newLesson2 = Lesson(
    title = "lesson2",
    level = 5,
    explanations = "expl2",
    questions = Seq.empty)
  LessonDAO.insert(newLesson2)

  "Lesson Model" should "be retrieved by level" in {
    running(FakeApp) {
      assert(Lesson.findByLevel(5).size === 2)
    }
  }
  it should "be of size 0 if no lesson of the level is found" in {
    running(FakeApp) …
Run Code Online (Sandbox Code Playgroud)

scala mongodb scalatest salat playframework-2.0

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

使用Salat和MongoDB时处理compsite键的最佳方法是什么?

我正在使用Salat与MongoDB,我正在尝试转换为自然键以避免数据库中的重复.我正在使用的案例类看起来有点像:

case class Foo(someRelatedId: String, email: String ...)
Run Code Online (Sandbox Code Playgroud)

我想添加一个由someRelatedId + email组成的自然键,并让MongoDB使用它而不是默认的ObjectId.从文档中我感觉有可能,但我仍然在寻找一个有效的解决方案.这在很大程度上是由于我对Scala本身缺乏熟练程度,我敢肯定.

更新:我现在有一个有效的解决方案,但我仍然想知道这是否是最好的方法

case class Foo(someRelatedId: String, email: String, naturalKey: String)

object Foo {
  def apply((someRelatedId: String, email: String) {
    apply(someRelatedId, email, someRelatedId+email)
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在package.scala中我映射到自定义salat上下文:

implicit val ctx = new Context() {
  val name = Some("Custom Context")
}
ctx.registerGlobalKeyOverride(remapThis = "naturalKey", toThisInstead = "_id")
Run Code Online (Sandbox Code Playgroud)

这样我避免在我的域类中有一个强制的(无意义的)_id字段,但我必须在伴随对象上重载apply(),这看起来有点笨拙.

scala mongodb salat

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

Salat不反序列化映射到Option [Set [A]]的集合

我在scala-salat Google小组中问了这个问题,但几天没有回复,因此在这里尝试.

我有一个案例类,其中包含一个集合Option.

case class SomeClass(
  var name:Option[String]=None,
  var addresses:Option[Set[Address]]=None
)

case class Address(
  var street:Option[String]=None,
  var zip:Option[String]=None
) 
Run Code Online (Sandbox Code Playgroud)

该文档存储在Mongo中就好了.但是,当我尝试使用findOne(有或没有SalatDAO)时,地址字段具有表示地址而不是地址案例类的JSON文本.

因此,Lift-JSON会跳过我的case类中的任何字段Option[Collection[A]].当我删除Option并且只是一起使用时addresses=Set[Address](),它可以工作.但是现在我最终在我的JSON中没有数据的空集,如果消费者删除了条目,我无法找到更新,或者我得到一个空,Set因为消费者没有发送此字段原始请求.

使用Option会将字段设置为None,这意味着我不必担心它是空的或修改的.

任何帮助将不胜感激.

scala mongodb salat lift-json

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

如何检索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
查看次数

使用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
查看次数

如何使用Salat for mongodb执行像"IN"查询这样的SQL?

我有很多记录,下面的结构保存在mongodb中.

case class User(_id:ObjectId = new ObjectId, email:String, role:String, employeeID:Int, createdOn:DateTime)
Run Code Online (Sandbox Code Playgroud)

如何使用salat在mongodb上执行"IN"之类的查询?

例如

val data = UserDAO.find(MongoDbObject("employeeID" -> List(2,4,5)) // (NOT working)
Run Code Online (Sandbox Code Playgroud)

谢谢Pawan

scala mongodb salat

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

scala&mongoDB - 如何使用salat计算记录?

是否可以使用salat库发出带有几个条件的count()查询?

现在我只是在做类似的事情

def countByPoll(pollId: String, option: Int): Int = {
  dao.find(
    MongoDBObject("pollId" -> pollId, "option" -> option)
  ).size
}
Run Code Online (Sandbox Code Playgroud)

但我相信一个计数会表现得更好

scala mongodb salat

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

无法使用salat从play app连接到MongoDB:命令失败[listDatabases]

我正在尝试开始使用playframework中的salat插件.我已经配置了数据库application.conf并添加了所有依赖项Build.scala并将salat添加到play.plugins文件中.我还没有在项目中添加任何代码,我只是按照github页面上的说明操作,然后尝试运行该项目.我收到以下错误消息

(Server started, use Ctrl+D to stop and go back to the console...)

[info] play - mongodb [default] connected at heroku_app4620908@ds031907.mongolab.com:31907/heroku_app4620908
[error] application - 

! @6bchnaacn - Internal server error, for request [GET /] ->

play.api.Configuration$$anon$1: Configuration error [couldn't connect to [ds031907.mongolab.com/107.21.153.211:31907]]
    at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:71) ~[play_2.9.1-2.0.3.jar:2.0.3]
    at play.api.Configuration.reportError(Configuration.scala:258) ~[play_2.9.1-2.0.3.jar:2.0.3]
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:105) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    at se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:98) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.3]
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.3]
Caused by: com.mongodb.CommandResult$CommandFailure: command failed [listDatabases]: { "serverUsed" : "db-uri" , "errmsg" : "need …

mongodb salat mlab playframework-2.0

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

将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
查看次数