问题标签 [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.
mongodb - 检索具有包含另一个文档属性的数组的文档
我在 Mongo 中存储某种文件系统,其中目录被命名为类别。
JSON 类别如下所示:
FS 类别与 parentId 属性链接在一起。
我需要显示类别面包屑。通过用户导航,我们可以知道我们在FS上的位置,但是类别可以通过他们的ID(书签类别,搜索引擎...)直接访问,无需任何FS导航。为了避免对数据库的递归调用,为了能够获得面包屑,我对它进行了非规范化。
问题是这个面包屑很难保持最新,因为可以移动顶级类别,因此必须更新其所有子面包屑。可以有许多子类别要更新,并且有不同的方法来处理这个问题。其中一些安全但昂贵(递归),另一些更快但可能导致一些不一致。
这里我想知道的是是否可以进行查询以检索具有坏面包屑的类别。我需要一个允许这样做的查询:
检索所有没有的类别:最后一个数组元素 breadcrumb.id = parentId
我认为“最后一个数组元素”部分是不可能的,但能够做到这一点也很好:
检索所有没有的类别:breadcrumb.id contains parentId
任何解决方案,在 Scala 或 Java 驱动程序中可用?我正在使用 Salat/Casbah。
这个问题可能会帮助您了解我所面临的问题:您将使用哪个数据库?MongoDB/Neo4j/SQL...所有这些?
mongodb - MongoDB 查询在集合中找不到文档
我的查询在我的 MongoDB 集合中找不到文档
这是数据库中的示例对象(注意 position.x 和 position.y 在 Salat 中是 Longs)
这是我的查询
scala - Build.scala:指定scala版本不起作用
我使用 playframework,这是我在 Build.scala 中的 appDependencies:
)
scala 2.10 没有 salat 和 play-salat 插件,所以我明确指定了 scala 版本。但它没有效果:
我错过了什么?
json - 在 Play 应用程序中使用 ModelCompanion 的 fromJSON 方法会引发 NoSuchMethodException
我是 Scala 的新手,我正在尝试做我的第一个 Play 2.0 应用程序。我在用着:
- 斯卡拉 2.9.3
- 玩 2.0.4
- SalatWithPlay2 1.1
我的conf/routes
文件中有这个:
我的Application.scala
文件中有这个:
这是代码Venue.scala
:
为了测试这是否有效,我localhost:9000/newVenue
以这个 JSON 为主体发送了一个 PUT 请求:
然后我得到这个错误:
我认为触发错误的行是val newVenue = Venue.fromJSON(request.body.toString)。
有谁知道出了什么问题?我遵循了 SalatWithPlay2 页面中的教程,也遵循了类似问题中的一些建议),但到目前为止我没有运气。
更新:
我找到了一种解决方法,虽然它不完全是一个解决方案,但也许它对其他人和理解什么是实际解决方案有帮助。
如果我去掉注解@Key,案例类Venue的代码是这样的:
然后我得到另一个错误:
例如,如果我不使用 ObjectId 而是使用 Long,则代码如下所示:
我没有错误!
所以 NoSuchMethodException 显然与 _id 相关的@Key 注释有关。我还尝试将 placeId 重命名为 _id 并出现相同的 NoSuchMethodException 错误。那么问题来了:为什么我不能用@Key注解说我的哪些属性映射到mongo数据库中文档的对象id呢? 除此之外,由于某些其他原因,常规整数无法自动转换为 ObjectId 实例。
谢谢!
mongodb - 多个文档更新 mongodb casbah scala
我有两个 MongoDB 集合
促销合集:
声称的集合:
每当有人要求促销时,都会在“claimedPro”集合中创建一个新文档,其中 proId 是第一个(促销)集合的(虚拟)外键。每个声明都应在“promo”集合中增加一个计数器“qtClaimd”。以事务方式增加另一个集合中的值的最佳方法是什么?我了解 MongoDB 没有针对多个文档的隔离。
另外,我采用“非嵌入式”方法的原因如下
促销被创建并发布给用户,然后索赔将以成千上万的数量发生。我认为将声明嵌入促销集合中是不合逻辑的,因为写入的数量将发生在单个文档中('coz mongo 在大小因数千个声明而增加时调整促销集合的大小)。采用非嵌入式方法使促销集合不受影响,但在“声明”集合中插入新文档。稍后在生成报告时,我必须显示“促销”详细信息以及该促销的“声明”详细信息。使用非嵌入式方法,我必须首先查询“promo”集合,然后使用“proId”查询“claims”集合。*还值得一提的是,有时可能会有 100 次“索赔”
用这两个集合实现交易效果的最佳方法是什么?我在 Scala 2.10 版本中使用 Scala、Casbah 和 Salat。
mongodb - 如何为混合类型的嵌套列表指定 salat DAO 模型?
我从 MongoDB 返回的数据如下所示:
该bar
属性包含一个未知大小的列表,其中每个项目都是一个长度为 2 的列表,其中包含一个 Int 和一个 Double。在 Scala 中,我将其表示为 List[(Int, Double)]。
我将如何为这个结构编写模型以与 Salat 一起使用?
Salat 不做元组,所以我尝试了:
但得到:
java.lang.IllegalArgumentException:BasicBSONList 只能与数字键一起使用,而不是:[a]
也试过:
但得到:
java.lang.ClassCastException:com.mongodb.BasicDBList 不能转换为 scala.collection.immutable.List
显然,数据可以以更好的形式存储,使用对象而不是长度为 2 的数组。但鉴于这就是我所拥有的,有没有一种使用 Salat 反序列化它的好方法?谢谢!
scala - 如何在验证数据库对象时以功能方式累积错误?
我有Product
案例类,由 DAO 层返回(使用 Salat)。第一次创建产品的用户状态保持为“草稿”,其中没有(产品)字段是强制性的。
验证 10 个产品属性、将所有验证错误累积到一个实体中然后以 JSON 格式一次将所有错误传递到前端的最佳功能方法是什么?
scala - 如何将 JSON 转换为 Scala 类(不是 Case 类),然后从该大类中填充一组案例类
我正在使用 Scala 2.10、Salat 和 Play frmework 2.1-RC2(即将升级到 2.1 版本)和 MongoDB 构建应用程序。
这是一个匿名应用程序,其中向消费者公开 JSON Web 服务。到目前为止,JSON 直接使用 Play 的 Json API 和隐式转换器转换为模型对象。我必须重构一些案例类以避免 22 个元组的限制,现在我正在重构而不是平面案例类,以拥有一个嵌入式案例(和嵌入式 MongoDB 集合)。
Web 服务接口应保持不变,客户端仍应像以前一样在平面结构中传递 JSON 数据,但应用程序需要将它们映射到适当的案例类结构中。处理这种情况的最佳方法是什么。怕写了很多转换代码<-> Flat JSON <-> 复杂案例类结构<-> 从复杂案例类再到flat JSON输出。
您将如何处理这样的要求?我假设许多其他人可能已经面临案例类 22 元组限制来处理这种要求?你会如何处理这个
mongodb - 在 Salat 和 MongoDB 中使用复合键
我刚刚阅读了这篇关于如何在 Salat 和 MongoDB 中使用复合键的帖子……它或多或少地清楚它是如何工作的。不过,我想知道@Key
即使我的密钥已经命名,注释是否是强制性的id
。我正在尝试序列化来自外部库的一些案例类,我不想重新定义它们。给定以下外部案例类:
是否可以序列化这样的User
对象(即没有@Key
注释)?
谢谢。
routing - 如何使用喷雾路由测试自定义 Json 对象
我正在为一些 CRUD 操作在 mongodb 之上创建一个带有喷雾路由的 Rest API,这一切都很好,期待每当我尝试使用 specs2 测试它时,以下规范
它将失败并出现以下错误:
我不知道在哪里查看源文件的引用和行号指向通用的 failTest(msg:String) 方法
更多信息:
我有一个案例类,我使用 SalatDAO 坚持使用 Mongo
其中 ObjectId() 一个类是包装 mongodb 的 ID 生成以通过 spray_json 进行此(未)编组的类我创建了一些 jsonFormats
以及我的路线的相关部分(删除了错误处理和日志记录):