问题标签 [spring-mongodb]
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 - 捕获在 Mongodb 的大查找查询期间添加的未知文档
我想知道Spring Mongo API
将find
所有内容加载到List
. 如果搜索结果包含十亿条记录,会不会影响内存?有人可以建议一种更好的方法来实现这一点,而无需将所有这些都加载到内存中。使用 limit 会有所帮助,但存在一个缺陷,即它不知道是否将新文档插入到集合中。X of billion
好吧,如果集合在读取记录后进行了修改,则 find by limit 将具有相同的效果。
所以两个问题:
- 通过不在内存中加载所有内容来提高性能
- 您将如何解决在处理过程中添加的这个未知文档?
来自 API 的代码
spring - 有没有办法使用 @Query 返回 MongoDB $sum 结果?
我对 MongoDB 和 StackOverflow(作为提问者)都很陌生。对于如何使用 @Query 注释(在 Spring 数据 mongodb 存储库中的计数)从 Spring 存储库返回 MongoDB“计数”投影,我已经看到了很好的响应。
基本上计数示例如下所示:@Query(value = "{'productDetails.productType': {$regex: ?0, $options: 'i'}, 'sourceDescriptor': ?1}", count = true)
...并且该方法返回一个int。我想做类似的事情,但我返回的 int 是一个总和而不是一个计数。@Query 注释看起来不像是为支持 sum() 操作而构建的,但这正是我所需要的。
我担心我被水洗了,我必须遍历一组文档才能得到我需要的结果。
我有一系列交易(如借方和贷方、正数和负数)。这是交易数据的模拟:
[{“action”:“AWARD”,“amount”:9000,“notes”:“初始余额”,“用户名”:“aa”},{“action”:“PAYOUT”,“amount”:1800,“ notes" : "Earnings", "username" : "aa" }, { "action" : "WITHDRAWAL", "amount" : -5000, "notes" : "直接存款 /r#e#d#a#c# t#e#d/", "username" : "aa" }, { "action" : "AWARD", "amount" : 7000, "notes" : "初始余额", "username" : "bb" }]
我想使用存储库获取给定用户名的各种交易的净(总和)。如果可能的话,我宁愿不返回所有 Mongo 文档的列表并遍历它们以获得总和。
有没有办法使用 @Query 注释来做到这一点?
这是我的第一个问题。如果我偏离目标,请原谅我。
spring-mongo - Spring Mongo 从 json 字符串转换为文档
我有一个用 @Document 注释的 Mongo 集合,我希望能够从字符串 (JSON) 中获取该 Java 对象,因为我们将这些类作为字符串推送到队列中。
Spring-Data-Mongo 中是否有将 JSON 转换为实际 Document 对象的方法?
java - 字符串 Mongo 从 GridFs 中删除所有文件
使用 Spring Mongo 有没有一种方法可以只使用查询或类似的东西一次从 Mongo 中删除多个文件(使用 GridFS 存储)?例如,如果我在集合 .files 中有一个字段 Language,我希望能够在单个查询中从 .files 和 .chunks 中删除所有条目。不确定这在 Mongo(春季以外)是否可行。
尝试使用 GridFsTemplate 但删除方法调用 GridFS.remove 方法(来自 Spring-Mongodb 的代码)
而这个方法获取内存中的所有文件,然后一一删除:
更新:来自评论:
是的,您不能在 MongoDB 中执行此类查询。此外,没有直接的方法可以使用 mongofiles 命令行工具和 mongo java 驱动程序删除 GridFS 中的一堆文件。
spring-data - 在 MappingMongoConverter 中使用 ClassTypeInformation.from(..) 引入了很多线程争用
我正在编写一个应用程序,它通过 Spring Data 将大量对象存储到 MongoDB 中MongoTemplate
。为了避免同步,我MongoTemplate
为每个线程创建了一个单独的线程。事实上,每个线程都拥有它自己的所有东西,以避免同步。
应用程序处理用户与网页交互时生成的事件。因此,来自特定用户的事件需要按顺序处理,而跨多个用户的事件可以并行处理。该应用程序当前由 N 个管道和一个负载均衡器组成,该负载均衡器根据 userId 的哈希/mod 将事件分发到管道。在管道结束时,使用 Spring Data MongoDB 模板将数据写入 MongoDB。
这个单一进程每秒能够处理 2500 个事件。但是,我观察到线程之间存在显着的争用(以每秒 2500 个事件的速率,任何阻塞都变得相当严重)。所有在访问同步缓存的 ClassTypeInformation 领域。
不幸的是,MongoTemplate
使用ClassTypeInformation
将缓存存储在同步地图中。因此,无论我如何尝试,将数据写入 MongoDB 总是会在我的工作线程之间发生这种争用。
我认为ClassTypeInformation
应该将其转换为 bean,以便可以在用户需要时提供。考虑到这一点,将消除多个线程之间的争用。
有谁知道为什么这被实现为静态而不是普通的 Spring bean?是否有任何计划进行此更改?
java - 实现自定义 DBObject 到 Java 转换器时的默认反序列化行为
我正在通过实现 Converter < FROM , TO > 接口为我的一些对象编写自定义序列化器和反序列化器。虽然在序列化的某些时候我可以通过简单地调用 MappingMongoConverter.convertToMongoType 来恢复默认行为,但我不太确定如何从我的自定义反序列化器中调用默认反序列化行为。
因此,一旦我检查了正在反序列化的对象的类型,并确定它是我不关心的对象(对象在集合中),我想让默认的反序列化机制来处理该对象。但是,我不太能够弄清楚如何在可以为我做这件事的东西(MappingMongoConverter?)上调用方法。
java - Spring data - 从分组中计算不同的项目
我有访问用户的数据库,其中包含这样的 place_id 和 user_id
我想在每个地方获得大量不同的用户。我最终得到了以下本地 mongo 聚合:
而现在我想使用Spring Data来实现它,现在的问题是投影中的$size操作,因为Spring data API没有这样的,至少我在参考中没有找到它。
也许还有任何方法可以创建 size 字段,而不是可以使用嵌套 api:
任何帮助表示赞赏。
java - mongodb mongoTemplate 获取具有某些条件的不同字段
我的 MongoDB json 结构是
我需要获取与源公开的数据集不同的集合。我试过这个查询,它没有用:
你能帮帮我吗?
mongodb - Mongo 搜索查询
以下是我的 mongo 文档的结构,我想搜索所有w为真的此类文档。
w是数组cd中第一个元素的键
仅供参考: 我正在使用 Spring Mongo 模板连接到数据库
java - Spring Mongodb 使用 DBRef 关联获取数据
我有一个带有嵌套 dbref 地址的零售商类。我想根据属于 Address 类的城市来获取零售商。但我得到了错误。
org.springframework.data.mapping.model.MappingException:路径引用地址无效。城市!只能直接或通过其 id 属性指向关联!
你能否让我知道出了什么问题以及如何解决这个问题?
代码如下
我正在使用以下查询来获取数据
数据