问题标签 [salat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
702 浏览

scala - Salat 没有反序列化映射到 Option[Set[A]] 的集合

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

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

该文档可以很好地存储在 Mongo 中。但是,当我尝试使用findOne(使用或不使用SalatDAO)来获取此地址时,addresses 字段具有表示地址的 JSON 文本,而不是 Address 案例类。

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

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

任何帮助将不胜感激。

0 投票
2 回答
499 浏览

scala - 如何更新/删除嵌入对象

给定以下域模型:

我一直在使用 Salat 来帮助反序列化/反序列化这些对象。但是,鉴于我知道要删除/更新的对象的福利 ID,我对如何从员工对象的福利列表中删除/更新特定对象感到有些困惑?

我不想迭代完整的好处列表以更新单个对象,因为此列表在运行时可能包含大量对象。有没有比获取 emp 对象、迭代列表直到找到所需对象、更新它然后保存 emp 对象更好的方法?

0 投票
1 回答
1558 浏览

scala - Casbah/Salat:如何查询包含部分字符串的字段?

我尝试使用 Casbah 和 Salat 编写查询来查询包含名称部分的字段。我尝试使用这样的正则表达式(在 SalatDAO 中):

该记录在 MongoDB 中,当我使用完整名称搜索它时,它可以工作。

告诉 casbah 搜索字符串的一部分的正确方法是什么?

我想修复的另一件事是参数的字符串连接。是否有任何默认方法可以使用 casbah 转义输入参数,因此该参数不会被解释为 javascript 命令?

最好的问候,奥利弗

0 投票
2 回答
2449 浏览

scala - 如何查询 Array[String] 的正则表达式匹配?

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

例如:

我有一个带有 ips 列表的 Maschine,它们作为字符串存储在字段 ips 中。现在我想搜索所有具有子网 192.168 的机器。

对我来说,我看起来无法使用应用于每个条目的正则表达式来查询数组,并且如果其中一个条目匹配则返回机器。

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

- 固定的

谢谢你的帮助。

现在一切正常。最后,我需要解决 Casbah 的一个限制,因为我需要使用 $or 加入查询,而 Casbah 抱怨缺少正则表达式的隐式。

我对带有其他字段的 RegExp 数组查询的最终代码是:

这不是最好的代码,需要修复参数的字符串连接。但它有效:)

0 投票
1 回答
558 浏览

scala - 将 Salat 与 MongoDB 一起使用时,处理复合键的最佳方法是什么?

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

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

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

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

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

0 投票
1 回答
604 浏览

scala - 如何使用 Salat for mongodb 执行类似“IN”查询的 SQL?

我在 mongodb 中保存了许多具有以下结构的记录。

如何使用 salat 在 mongodb 上执行类似“IN”的查询?

例如

谢谢帕万

0 投票
2 回答
1508 浏览

scala - 使用 Casbah / Salat 定义自定义序列化 - 或将序列化委托给成员?

我正在为一个来自 Rails 的新项目学习 Scala。我已经定义了一个将在我的许多模型中使用的类型,基本上可以将其视为“属性”的集合。它基本上只是一个 hashmap 的包装器,将它的大部分职责委托给它:

所以我会用 a 定义一个模型类Description,比如:

但是,当我坚持Person使用 SalatDAO 时,我最终会得到一个如下所示的文档:

实际上我不需要在attributes标签中嵌套description标签 - 我真正想要的是:

我没有尝试过,但我认为如果我Description扩展 aMap而不是包含一个,我可以让它工作,但我宁愿不这样做,因为 aDescription不是 的类型Map,它具有一些行为aMap以及它自己的其他行为,我稍后会添加。组合优于继承等等。

所以我的问题是,我如何告诉 Salat(或 Casbah,实际上我有点不清楚是哪个在进行转换,因为我才刚刚开始使用它们)如何序列化和反序列化Description类?在这里的 casbah 教程中说:

也可以创建自己的自定义类型序列化器和反序列化器。请参阅自定义序列化器和反序列化器。

但是这个页面似乎不存在。还是我走错了路?实际上有没有一种非常简单的方法来表明这是我想要发生的事情,注释或其他东西?或者我可以以某种方式简单地将序列化委托给属性映射吗?

编辑:在查看了 JodaTime 转换助手的源代码后,我尝试了以下方法,但还没有让它工作:

当我调用RegisterCustomConversionHelpers()然后保存时,Person我没有收到任何错误,它只是没有效果,以与以往相同的方式保存文档。对于我想要的东西,这似乎也有很多事情要做。

0 投票
1 回答
700 浏览

scala - Salat 错误:SalatDAO 所需的类文件丢失。com.mongodb.casbah.TypeImports 的引用类型 MongoCollection 引用不存在的符号

当我尝试扩展 SalatDAO 或使用 grater[T].asObject(x) 时出现以下错误:

SalatDAO 所需的类文件丢失。com.mongodb.casbah.TypeImports 的引用类型 MongoCollection 引用不存在的符号。

我遵循了 Salat 示例,但由于某种原因,扩展 SalatDAO 和 graters asObject 对我不起作用。我在网上找不到有关此错误的任何参考。

这是我的代码:

我非常感谢您对此的任何帮助或建议。我是 Scala 和 Mongodb 的新手。

我正在使用 sbt compile 进行编译。这是我的 build.sbt

0 投票
1 回答
2052 浏览

scala - 玩!框架 2.0 scala - ClassCastException:models.MyModel 无法转换为 models.MyModel

这是我的第一个 play 2.0 应用程序,scala 对我来说仍然很新,所以我很可能在某个地方犯了错误。我正在使用一个非常新的插件,它捆绑了 Salat 和 Casbah:https ://github.com/leon/play-salat

我已经简化并重命名了所有内容以使其通用。

我的观点(views/MyController/search.scala.html):

我的控制器(controllers/MyController.scala):

我的模型:(models/MyModel.scala):

我收到了这个错误:

这对我来说没有多大意义——有人遇到过这样的事情吗?

完整的堆栈跟踪:

0 投票
2 回答
434 浏览

scala - 我可以使用伴随对象来管理 Salat 案例类 DTO 的范围吗?

我一直在 Play2 webapp 中使用 Salat 进行 MongoDB 交互(通过 Leon Radley 的简洁 SBT 插件)。效果很好,但是由于嵌套(为了反映嵌套的 JSON/BSON 模型定义)我们有许多案例类 DTO,我们希望在基本模型类型的伴随对象中巧妙地定义嵌套的案例类 DTO。

这可以防止在我们的 Salat 数据访问层中激增的案例类 DTO 中的命名空间冲突。例如,我们定义了一个“描述”案例类,但它为不同的模型对象重新定义,所以我们想要一种简洁的方式来命名它。为此,我们尝试使用伴随对象,就像在这个小片段/示例中一样:

这一切都编译得很漂亮,但在运行时失败并出现com.novus.salat.util.ToObjectGlitch:在从 Mongo 解组期间参数类型不匹配。

如果我们简单地将伴随对象定义转换为包定义(封装 DTO 汤的一种稍微混乱的方式),那么一切都运行良好(解组是一种享受)。

我很困惑为什么在对象中声明案例类在运行时失败;在对象中定义案例类(Salat DTO)是否有技巧?