java使用mongodb问题集

1.js和java语言差异性:

问题:

由于mongo是 一个js引擎,而很多目前应用采用的是java开发,由于js并非强语言类型,导致写入的json中如果包含数字时就会出现问题。

js认为数字是number类型,换言之,js的number类型对应的强类型语言的float,导致如果写入一个数据,用java转换为整形时会失败。

解决:

禁止使用js更新mongodb,sa在使用时只允许查询,不允许修改和添加

 

2.查询mongodb复制集没有分布读压力:

问题:

mongodb replicate sets架构,设置认证,开启slaveOk(),所有的读并没有分配到对应的secondary

解决:

由于mongodb自由在运行时设置的slaveOk()才有效,退后后就得重新设置。

因此在java代码中需要明确说明是否使用从库读,代码如下:

 

mongo.setReadPreference(ReadPreference.SECONDARY); 或者 db.setReadPreference(ReadPreference.SECONDARY); 或者更细力度,按自己需求定

 

3.maxBsonObjectSize

在应用开发时,我们往往可能设置进文档(document)的大小不一,但是mongodb服务器端设置了文档大小,对于早期版本是4M,对于后来设置为16M。

而驱动默认为4M,如果从服务器中获取过来数据,那么采用服务器端的数据。

java驱动获取最大bson数据代码如下:

int fetchMaxBsonObjectSize() { if (_masterPortPool == null) return 0; DBPort port = _masterPortPool.get(); try { CommandResult res = port.runCommand(_mongo.getDB("admin"), new BasicDBObject("isMaster", 1)); // max size was added in 1.8 if (res.containsField("maxBsonObjectSize")) { _maxBsonObjectSize.set(((Integer) res.get("maxBsonObjectSize")).intValue()); } else { _maxBsonObjectSize.set(Bytes.MAX_OBJECT_SIZE); } } catch (Exception e) { _logger.log(Level.WARNING, "Exception determining maxBSONObjectSize ", e); } finally { port.getPool().done(port); } return _maxBsonObjectSize.get(); }
获取的maxBsonObjectSize的数据,只要修改服务器端的这个数据即可。

具体设置如下:

 

 

 

------
author: madding.lip
date: 2012.02.09

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中操作MongoDB进行regex模糊查询有以下步骤: 首先,我们需要创建一个MongoClient对象,用于连接到MongoDB数据库。可以使用MongoClient的构造函数指定数据库的地址和端口号,也可以使用MongoClientURI指定完整的连接字符串。 接下来,需要获取到指定的数据库合。可以使用MongoClient的getDatabase方法获取数据库对象,使用Database的getCollection方法获取合对象。需要注意的是,在Java中,MongoDB合是懒加载的,只有在需要时才会被创建。 然后,在查询时使用BsonDocument对象指定regex表达式。BsonDocument是MongoDB的文档对象,可以用于构建查询条件。使用BsonDocument的append方法可以添加需要匹配的字段和对应的regex表达式。 最后,使用Collection的find方法执行查询操作,并将查询结果以某种方式展示出来。可以使用MongoDB的游标对象来遍历查询结果,也可以使用Java的Stream API进行过滤、映射等操作。 以下是一个示例代码,演示了如何进行regex模糊查询: ```java import com.mongodb.client.*; import org.bson.*; import static com.mongodb.client.model.Filters.*; public class Main { public static void main(String[] args) { // 创建MongoClient对象 MongoClient mongoClient = new MongoClient("localhost", 27017); // 获取数据库合 MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("users"); // 构建查询条件 BsonDocument query = new BsonDocument(); query.append("name", new BsonRegularExpression("John.*")); // 匹配以John开头的name字段 // 执行查询操作 FindIterable<Document> result = collection.find(query); // 遍历查询结果 for (Document document : result) { System.out.println(document.toJson()); } // 关闭连接 mongoClient.close(); } } ``` 上述代码中,假设数据库名为test,合名为users。在查询条件中,我们使用了以"John"开头的name字段,查询结果将会匹配到所有以"John"开头的文档,并打印出来。 希望以上内容能够解答您关于Java操作MongoDB的regex模糊查询的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值