如何正确处理VertX的MongoClient中的异常情况
在我的应用程序的启动方法中,我想检查提供给应用程序的MongoDB的凭据是否可以.如果可以的话,我将继续这家启动,如果不是,则该应用程序应该退出,因为它无法连接到DB.代码段如下: // Create the client MongoClient mongodb = null; try { mongodb = MongoClient.createShared(vertx, mongo_cnf, mongo_cnf.getString("pool_name")); } catch(Exception e) { log.error("Unable to create MongoDB client. Cause: '{}'. Bailing out", e.getMessage()); System.exit(-1); } 如果我提供了错误的凭据,则不会调用catch块.但是我在控制台上得到以下内容: 19:35:
2 2023-11-18
编程技术问答社区
使用MongoDB Java 3.0驱动程序进行批量升级
在MongoDB Java驱动程序的较早版本中,要运行查询并在结果上进行无序的批量上述. BulkWriteOperation bulk = dbCollection.initializeUnorderedBulkOperation(); bulk.find(searchQuery).upsert().update(new BasicDBObject("$set", getDbObjectModel())); 但是在版本3中,随着BSON文档支持和MongoCollection的引入.Bulkwrite()方法如何完成? 我尝试了: List> documentList = new ArrayList(); collection.bulkWrite(documentList, new BulkWriteOptions().ordered(false)); 但是,我需要UpSert功能. 谢谢.
2 2023-11-09
编程技术问答社区
使用Java驱动3.4将数据追加到MongoDB-Document中的数组。
我正在使用MongoDB Java驱动程序3.4,并希望在Mongo-DB集合中更新文档(具有ID" 12").目前,该文档如下: {"id" : "12", "Data" : [{"Author" : "J.K. Rowling", "Books" : {"Harry Potter 1" : "$15.99", "Harry Potter 2" : "$16.49", "Harry Potter 3" : "$19.49"}}, {"Author" : "Philip Roth", "Books" : {"American Pastoral" : "$12.99", "The Human Stain" : "$39.49", "Indignation" : "$29.49"}}
0 2023-11-09
编程技术问答社区
MongoDB Atlas:用户不允许对system.indexes进行查找操作
我正在使用Mongodb Atlas,最近我开始在MongoDB副本上遇到此错误: 不允许用户在[mydb.system.indexes] 上执行操作[查找] 什么都没有改变,所以我想知道有什么问题.用户在mydb上和 docs docs 看起来应该有权这样做.另外,我尝试将用户更改为具有任何权利的管理用户,但仍然有此错误.有趣的是,system集合不存在于mydb中,但是Spring Data试图查询并获取此错误. 这是Mongo的完整日志: Error: error: { "ok" : 0, "errmsg" : "user is not allowed to do action [find] on [mydb.system.indexes]", "code" : 8000, "codeName" : "AtlasError" } mongoDB连接URI看起来像这样: spring.data.mongodb.uri=m
8 2023-09-13
编程技术问答社区
Java MongoDB一次保存多个文档
我有一个更新的对象/文档的列表,我需要一次保存所有对象. 我在mongotemplate中看到了save(),但它可以一次使用单个文档. 有什么方法可以一次保存多个文档,或者我需要调用保存循环? 解决方案 您可以使用MongoTemplate>或ReactiveMongoTemplate的insertAll,但必须谨慎使用它.它可以执行其名称的代表 - 插入所有文档.如果您调用save方法,则save具有乐观的锁定,因此它检查是否不覆盖您不应该的文档(如果它具有@Version注释). insertAll没有检查乐观的锁定,因此只要您真正想做一个插入,就可以使用它.持续尚未坚持的文件,或者您不在乎覆盖这些文件和乐观的锁定.如果您关心乐观的锁定,那么您所能做的就是为每个文档致电save,这将生成大量的I/O操作,但这就是确保您将使用匹配版本更新文档所需的内容. 另外,您还必须记住,insertAll实际上插入了新文档,这意味着您无法使用此方法更新文档,因为您会得到重复的键异常
12 2023-09-13
编程技术问答社区
如何使用带阵列过滤器的过滤位置运算符应用更新
我在MongoDB 3.6上运行,Mongo驱动程序3.4.3和Spring Data Mongo 1.5.10.以下是我的文档的结构 { "_id": 12345, "_class": "com.example.ProductRates", "rates": [ { "productId": NumberInt(1234), "rate": 100.0, "rateCardId": NumberInt(1), "month": NumberInt(201801) }, { "productId": NumberInt(1234), "rate": 200.0, "rateCardId": NumberInt(1), "month": NumberInt(201802) }, { "productId": NumberInt
2 2023-09-13
编程技术问答社区
mongo java driver 2.14.0. 更改废弃的代码
我正在将Mongo Java驱动程序罐升级到2.14.0.我的旧代码正常工作,但是遵循显示弃用的类和构造函数的代码,因此我需要兼容的代码,而无需弃用的类和构造函数,mongo-java-driver.jar.jar 2.14.0. public MongoTemplate getMongoTemplate() { SimpleMongoDbFactory simpleMongoDbFactory = null; try { MongoOptions opts = new MongoOptions();//depricate opts.threadsAllowedToBlockForConnectionMultiplier = getThreadsAllowedToBlockForConnectionMultiplier();//depricate opts.connectionsPerHost = getCo
4 2023-09-11
编程技术问答社区
改变spring-boot中默认的Mongo连接池大小
我想更改Java Mongodb驱动程序提供的连接池的默认大小,该根据Mongo Docs. . 下面是我用来自定义连接池大小的Mongo客户端bean(引用这个问题).我将Min和Max ConnectionPerhost属性都设置为1,并将与DB交互的10个并行的工作线程设置为1,以确保应用我的更改. @Bean public Mongo mongo() throws Exception { MongoClientOptions.Builder clientOptions = new MongoClientOptions.Builder(); clientOptions.minConnectionsPerHost(1); clientOptions.connectionsPerHost(1); MongoClient mongoClient = new MongoClient(new MongoClientURI(env.getPropert
10 2023-09-10
编程技术问答社区
Spring mongo查询设置自定义超时
我想降低我的Spring-Mongo Java应用程序中的超时设置(如果数据库无法访问,查询应在300毫秒后发生故障). 我尝试了此配置: @Configuration public class MongoConfiguration { private String mongoUri = "mongodb://127.0.0.1:27017/myDb?connectTimeoutMS=300&socketTimeoutMS=300&waitQueueTimeoutMS=300&wtimeoutMS=300"; @Bean public MongoDbFactory mongoDbFactory() throws Exception { Builder options = new MongoClientOptions.Builder().socketTimeout(300).connectTimeout(300).maxWaitTime(300); retu
6 2023-09-10
编程技术问答社区
针对特定字段值的MongoDB Scala-查询文档
所以我知道在Mongo Shell中,您使用点符号在任何文档中获取所需的字段. 在mongodb scala中如何实现点符号.我对它的工作原理感到困惑.这是从集合中获取文档的代码: val record = collection.find().projection(fields(include("offset"), excludeId())).limit(1) 编辑: 我正在尝试制定一种机制,以基本上重新处理Kafka记录,以关闭消费者.为此,我将KAFKA记录存储在外部数据库中,然后尝试从那里获取最新偏移量,并从那时开始消耗.这是我的Scala方法,应该这样做: def getLatestCommitOffsetFromDB(collectionName: String): Long = { import com.mongodb.Block import org.bson.Document val printBlock = new Block[Docum
8 2023-08-20
编程技术问答社区
基于mongodb中其他字段的updateMany
我有两个文档 /* 1 */ { "lastUpdated" : ISODate("2019-01-01T01:01:20.201Z"), "content" : "someText01", } /* 2 */ { "lastUpdated" : ISODate("2020-11-11T16:11:20.202Z"), "content" : "someText02", } 现在,我想更新文档 - 创建新字段作为最后一个字段的副本; 在robo3t中,我可以做这样的事情 db.getCollection('someDocuments').update({}, [ {"$set": {"byMongoQuery": "$lastUpdated", }} ], {"multi": true} ) 它有效. 现在,我想使用Java代码(Mongo-Java-Driver 3.9.0)进
8 2023-06-22
编程技术问答社区
如何用mongo java驱动记录对MongoDB的实际查询?
我想看看什么疑问mongo java驱动程序会产生什么,但我无法做到. 使用来自官方文档我只能在日志中看到更新操作执行,但是我看不到此操作的查询. 解决方案 您可以将org.mongodb的记录器级别设置为DEBUG,您的Java驱动程序将像这样发射详细的记录: 2018-01-18 16:51:07|[main]|[NA]|INFO |org.mongodb.driver.connection|Opened connection [connectionId{localValue:2, serverValue:39}] to localhost:27017 2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Inserting 1 documents into namespace stackoverflow.sample on connection [connection
22 2023-06-22
编程技术问答社区
如何用Java在MongoDB中执行带有AND和OR子句的查询?
我想用Java驱动程序3.2在MongoDB 3.2中执行查询,该查询同时包含$and和$or条款. 使用参考,我尝试了以下方法: List criteria1 = new ArrayList(); List criteria2 = new ArrayList(); criteria1.add(new Document("fetchStatus", new Document("$gte", FetchStatus.PROCESSED_NLP.getID()))); criteria1.add(new Document("fetchStatus", new Document("$lte", fetchStatusParam))); criteria1.add(new Document("episodeID", new Document("$in", episodeIDs))); criteria2.add(new Docume
4 2023-06-06
编程技术问答社区
如何仅使用mongo java驱动程序执行MongoDB本机查询(JSON)?
如何仅使用Java-Mongo-Driver解雇Mongo Native查询. 否 spring-data或eclipselink或Hibernate OGM,仅使用 Java-Mongo-Driver 样本查询: db.orders.aggregate([ { $unwind: "$specs" }, { $lookup: { from: "inventory", localField: "specs", foreignField: "size", as: "inventory_docs" } }, { $match: { "inventory_docs": { $ne: [] } } } ]) 解决方案 如果您的问题是: 我可以将上面的字符串传递到Java
14 2023-04-20
编程技术问答社区
MongoDB BasicDBObject vs Document in java
我正在使用mongodb v3.2.0与mongo java驱动程序3.0.4版本.我使用的是BasicDBObject(已弃用),而不是在Java中使用Document,因为我需要进行许多更改以转换我的独立Java项目中的文档.任何人都可以告诉我变成文档吗?有什么方法可以使用Java改善我在MongoDB上的频繁写和阅读操作. 解决方案 基本的dbobject不弃用. BasicDBobject中唯一的弃用部分是DBPointer类,还有其他一些方法,例如toString() and getId() 文档实现Map,与基本DB对象相比,编写的代码较少 dbobject 尽管不建议用于新应用程序,但是从2.x驱动程序系列中升级的应用程序可能会继续使用DBOBject接口来表示BSON文档. dbObject类似于文档,因为它代表bson值为对象,但它具有无法克服的一些缺点: 它是一个接口而不是类,因此如果不破坏二进制兼容性,则无法
32 2023-03-31
编程技术问答社区
如何根据一个嵌入式数组来过滤文件?
在查看db.scores.find( { results: { $elemMatch: { $gte: 80, $lt: 85 } } } ) 我使用以下导入 import static com.mongodb.client.model.Filters.and; import static com.mongodb.client.model.Filters.elemMatch; import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Projections.excludeId; import static com.mongodb.client.model.Projections.fields; import static com.mongodb.client.model.Projections.include; 并提出以下代码以执行类似的操作(ARRA
14 2023-03-31
编程技术问答社区
Mongo DB Java 3.x驱动-按查询分组
我想学习如何使用Mongo DB Java 3.x Driver来实现group by查询.我想通过usernames进行分组,然后按结果的count对结果进行排序DESC. . 这是我要实现Java等效的外壳查询: db.stream.aggregate({ $group: {_id: '$username', tweetCount: {$sum: 1} } }, { $sort: {tweetCount: -1} } ); 这是我实施的Java代码: BasicDBObject groupFields = new BasicDBObject("_id", "username"); // count the results and store into countOfResults groupFields.put("countOfResults", new BasicDBObject("$sum", 1)); BasicDBObject group = new B
18 2023-03-31
编程技术问答社区
如何使用Java驱动程序为MongoDB构建一个$或查询?
我正在尝试或MongoDB(使用Java驱动程序)中的某些条件.这就是我在做的: Pattern regex = Pattern.compile("title"); DBCollection coll = MongoDBUtil.getDB().getCollection("post_details"); BasicDBObject query = new BasicDBObject(); query.put("category_title", "myCategory"); query.append("post_title", regex); query.append("post_description", regex); DBCursor cur = coll.find(query); while(cur.hasNext()) { System.out.println(cur.next().get("post_id")); } 我想在
10 2023-03-31
编程技术问答社区
如何使用MongoClient类从Mongo java驱动调用db.Collection.stats()
我正在使用这种依赖性. org.mongodb mongodb-driver 3.12.2 软件包: 包com.mongodb.mongoclient; 我如何按名称获得收集,然后获得其状态,以便可用以下信息: 大小 Storagesize 看来此致电Mongo Java驱动程序的DB.Collection.Stats()使用不defcected class package com.mongodb; // Mongodb initialization parameters. int port_no = 27017; St
14 2023-03-31
编程技术问答社区
在Java中使用antlr parsetree解析sql查询到mongo bson文档
我有一个像查询示例这样的SQL: Select id,name from employee where age > 30 and department = 'IT' limit 200 SQL查询语法器是在Antlr4语法文件中定义的.是否有任何将此查询的解析树转换为BSON文档的实现? 然后,BSON文档将用于查询Mongo DB. 解决方案 在我以前的工作之一中,我做了类似的事情:有一个查询(不是SQL,但非常相似),并将其转换为Mongo查询. 我没有代码可以共享,但是我可以分享我的想法: Mongo不符合SQL,因此您不能只采用SQL语法.加入和所有关系代数呢?在Mongo凭借其聚合框架在Mongo中非常棘手的聚合呢?在相反的方向上,您如何生成在Mongo中翻译成"存在"子句的SQL.有很多这样的事情,有些很小,有些是巨大的,但是底线您必须谈论某种SQL的子集,有些DSL被允许用作查询语言,并且看起来像" SQL",因为人们习惯了SQL.
14 2023-03-31
编程技术问答社区