问题标签 [casbah]

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 投票
3 回答
1992 浏览

scala - 如何使用不可变的 Salat 案例类更新 Mongo 中的对象

我正在使用 Scala、Salat、Casbah、Mongo、Play2、BackboneJS 开展一个项目……但同时要学习很多新东西……我对 Scala 没问题,但我找到了我的代码蹩脚的,我真的不知道改进它的解决方案是什么。

基本上我的用例是:

  • 一个MongoDB对象被Play2发送到浏览器的JS代码
  • JS 代码更新对象数据(通过 Backbone 模型)
  • JS 将更新后的 JSON 发送回服务器(由 Backbone 保存方法发送,并由 Play 使用 json bodyparser 接收)
  • Play 收到的 JSON 应该更新 MongoDB 中的对象
  • 出于安全原因,某些字段不应更新(对象 id、creationDate...)

我的问题是最后一部分。我使用带有 Salat 的案例类作为存储在 MongoDB 中的对象的表示。

我真的不知道如何处理从 JS 代码收到的 JSON。

  • 我是否应该将 JSON 绑定到 Salat 案例类中,然后要求 Mongo 用全新的案例类对象覆盖以前的对象数据?如果是这样,Play2 或 Salat 有没有办法从收到的 JSON 中自动创建案例类?

  • 我应该为我想要更新的字段单独处理我的 JSON 字段吗?

  • 我应该使我的案例类的元素可变吗?这就是我们在 Java 中使用 Hibernate 所做的实际操作:从 DB 中获取对象,更改其状态,然后保存它。但这似乎不是使用 Scala 的合适方式......

如果有人可以为我的用例给我一些建议,那就太好了,因为我真的不知道该怎么做:(

编辑:我在这里问了一个相关问题:我应该用不可变或可变数据结构表示数据库数据吗?

0 投票
2 回答
3405 浏览

java - 为什么 Casbah / Java MongoDB 驱动程序会出现 java.lang.IllegalArgumentException?

我看到一个奇怪的问题使用casbah / java driver.

当驱动程序尝试从 mongo 创建响应时,我不断遇到以下异常:

这似乎是随机发生的,即使在 mongo 不应该从查询中返回任何结果的情况下也是如此。报告的大小不一致,通常比它应该或可能的大得多。

我猜这可能是响应的某种形式的腐败。我很难使用 Wireshark 解决这个问题的正面或反面,但我始终发现,导致引发此错误的查询的请求/响应链具有来自 MongoDB 的“TCP Window Full”响应:

在此处输入图像描述

我正在使用的版本:

p>

如果有人可以就我可能做错的事情或有关如何进一步调试此问题的任何指示提供任何建议,我将不胜感激

更新:查看发行说明后,Casbah 2.1.5.0,使用的 java 驱动程序的版本似乎是 2.5.3,而不是 2.7.3

0 投票
1 回答
866 浏览

scala - 卡斯巴的 Mongo $elemMatch

我正在使用 Casbah 2.9.2

我的 mongodb 架构如下所示:

[_id:“三角形”,信息:[颜色:“红色”,线条:“细”,UseID:“1”,SourceId:“2”]]

我希望能够编写一个更新行,首先检查 _id、Color 和 Line 是否一起唯一,如果是,则更新 UseID 和 SourceID,否则创建一个新的“Info”条目。这让我从命令行得到了我想要的东西:

给我这个条目:

但是,当我为 Scala 翻译成 Casbah 时,它不会:

第一个抱怨(来自 IntelliJ)是它希望所有的 ',' 都是 ';',我觉得这是不正确的,但为了调试,我必须这样做,这让我想到了第二个错误:

“错误:(java.lang.String, java.lang.String) => com.mongodb.casbah.query.Imports.DBObject 没有可用的隐式视图。涉及默认参数的应用程序中发生错误。“信息”$not { _ $elemMatch {"

所以我想问题是,我什至可以从 Casbah 的命令行进行更新吗?如果是这样,怎么做?

谢谢!

0 投票
1 回答
2190 浏览

scala - 在 MongoDB / Casbah / Scala / 中增加嵌入对象值的更新

我需要增加嵌入对象的属性值的计数,或者如果它不存在则创建对象属性,或者如果不存在则创建整个记录,在 Scala 中使用 Casbah for MongoDB。如果可能的话,也有兴趣直接在 Mongo 中执行此操作。

例如,如果集合中没有对象,则首先添加一条带有给定的记录,并在属性的默认值中添加_id一个对象。此查询不起作用,但看起来像我期望的那样:vals1a

这将导致以下记录:

现在将一个新对象插入到vals

产量:

最后,使用与上一步完全相同的查询,更新/增加b属性的值:vals

产量:

0 投票
1 回答
351 浏览

mongodb - 检索具有包含另一个文档属性的数组的文档

我在 Mongo 中存储某种文件系统,其中目录被命名为类别。

JSON 类别如下所示:

FS 类别与 parentId 属性链接在一起。

我需要显示类别面包屑。通过用户导航,我们可以知道我们在FS上的位置,但是类别可以通过他们的ID(书签类别,搜索引擎...)直接访问,无需任何FS导航。为了避免对数据库的递归调用,为了能够获得面包屑,我对它进行了非规范化。


问题是这个面包屑很难保持最新,因为可以移动顶级类别,因此必须更新其所有子面包屑。可以有许多子类别要更新,并且有不同的方法来处理这个问题。其中一些安全但昂贵(递归),另一些更快但可能导致一些不一致。


这里我想知道的是是否可以进行查询以检索具有坏面包屑的类别。我需要一个允许这样做的查询:

检索所有没有的类别:最后一个数组元素 breadcrumb.id = parentId

我认为“最后一个数组元素”部分是不可能的,但能够做到这一点也很好:

检索所有没有的类别:breadcrumb.id contains parentId

任何解决方案,在 Scala 或 Java 驱动程序中可用?我正在使用 Salat/Casbah。

这个问题可能会帮助您了解我所面临的问题:您将使用哪个数据库?MongoDB/Neo4j/SQL...所有这些?

0 投票
1 回答
481 浏览

scala - 使用 scala mongodb casbah 进行嵌套拉取

假设我有一个简单的对象

我想从数组中删除答案是

我正在尝试这样的事情,但运气不佳:

0 投票
1 回答
414 浏览

mongodb - Casbah 和 Scala 的 MongoDB 插入行为

我在 Scala 中使用 casbah 插入 MongoDB,但不理解我看到的一些行为。

好吧,这里没什么特别的。事实上,如果我插入一个文档,它会很好用。我的问题是,如果我再次插入同一个文档,那么我的错误 == null,我会期望某种迹象表明我正在尝试插入已经存在的记录。

这是因为我的 defaultWriteConcern 太“松散”,还是我只是不理解正确的行为?我正在使用 casbah 2.5.0.SNAPSHOT。我使用的是旧版本,我似乎记得它给了我某种错误,这是我所期望的。

0 投票
1 回答
666 浏览

mongodb - 多个文档更新 mongodb casbah scala

我有两个 MongoDB 集合

促销合集:

声称的集合:

每当有人要求促销时,都会在“claimedPro”集合中创建一个新文档,其中 proId 是第一个(促销)集合的(虚拟)外键。每个声明都应在“promo”集合中增加一个计数器“qtClaimd”。以事务方式增加另一个集合中的值的最佳方法是什么?我了解 MongoDB 没有针对多个文档的隔离。

另外,我采用“非嵌入式”方法的原因如下

促销被创建并发布给用户,然后索赔将以成千上万的数量发生。我认为将声明嵌入促销集合中是不合逻辑的,因为写入的数量将发生在单个文档中('coz mongo 在大小因数千个声明而增加时调整促销集合的大小)。采用非嵌入式方法使促销集合不受影响,但在“声明”集合中插入新文档。稍后在生成报告时,我必须显示“促销”详细信息以及该促销的“声明”详细信息。使用非嵌入式方法,我必须首先查询“promo”集合,然后使用“proId”查询“claims”集合。*还值得一提的是,有时可能会有 100 次“索赔”

用这两个集合实现交易效果的最佳方法是什么?我在 Scala 2.10 版本中使用 Scala、Casbah 和 Salat。

0 投票
1 回答
590 浏览

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 反序列化它的好方法?谢谢!

0 投票
3 回答
985 浏览

scala - Scala 和 Casbah - 错误:Option[com.mongodb.DBObject] 不带参数

我正在尝试获取文档并获取它的属性。当我使用 findOne 方法时,我希望得到 MongoDBObject,但我收到了 Option[com.mongodb.DBObject]。如何从中获取属性?是否有可能得到 MongoDBObject 而不是这个?