标签: mongodb-java

从 InputStream 获取 Publisher<ByteBuffer>

我刚刚升级了 mongo-db-java-driver,现在方便的功能GridFSBucket.uploadFromStream已经消失了。因此我们现在得到了一个

GridFSUploadPublisher<ObjectId> uploadFromPublisher(String filename, Publisher<ByteBuffer> source);
Run Code Online (Sandbox Code Playgroud)

有什么想法如何将我的 InputStream 转换为 吗Publisher<ByteBuffer>?java驱动程序或Reactor中有任何实用函数吗?

java bytebuffer publisher reactor mongodb-java

5
推荐指数
1
解决办法
1710
查看次数

当负载增加时,Mongodb 似乎正在调用 secondary

我们有一个 mongo db 副本集配置,其中有 1 个主数据库和 2 个辅助数据库。我们已将读取首选项设置为,primary因为我们的辅助节点之一位于远程区域,并且不希望在该节点上进行读取操作。

如果我在调试模式下逐一运行 collection.find() 方法(该方法使用 MongoCursor 并迭代响应),我会看到所有调用都转到主函数。

上述可以通过2种方式验证:

  1. 客户端上的 mongo 驱动程序日志显示命令已发送到主 mongo 服务器
  2. 服务器上的mongodb.log打印find操作(启用slowms选项)

但是,如果我在没有调试模式(更高的速度+负载)的情况下运行相同的操作,则两台服务器的 mongodb.log 都会开始显示查找操作。这是出乎意料的,因为我们希望调用仅转到主数据库而不是远程辅助数据库。此外,客户端上的 mongo 驱动程序日志显示命令仅发送到主 mongo 服务器。

此外,主 mongodb.log 和辅助 mongodb.log 的区别在于,辅助 mongodb.log 中的 readPreference 显示为“secondaryPreferred”(并且我们不在代码中的任何位置设置此首选项)。

在辅助 mongodb.log 中看到日志的原因可能是什么?

是否只是打印日志并且调用真的会转到主要?或者主服务器确实将调用转发到具有 secondaryPreferred 读取首选项的辅助服务器?

mongodb mongodb-java mongodb-query

5
推荐指数
0
解决办法
252
查看次数

在合理的时间内使用mongoDB检索大量记录

我正在使用mongoDB存储一个querylog并得到一些关于它的统计数据.我存储在mongoDB中的对象包含查询文本,日期,用户,用户点击某些结果等等.

现在我正在尝试检索用户在某一天没有用java点击的所有查询.我的代码是这样的:

    DBObject query = new BasicDBObject();
    BasicDBObject keys = new BasicDBObject();
    keys.put("Query", 1);
    query.put("Date", new BasicDBObject("$gte", beginning.getTime()).append("$lte", end.getTime()));
    query.put("IsClick", false);
    ...
    DBCursor cur = mongoCollection.find(query, keys).batchSize(5000);
Run Code Online (Sandbox Code Playgroud)

查询的输出包含我需要迭代的大约20k条记录.该问题是,它需要几分钟:(我不认为这是正常的服务器日志中我看到.:

Wed Nov 16 16:28:40 query db.QueryLogRecordImpl ntoreturn:5000 reslen:252403 nscanned:59260 { Date: { $gte: 1283292000000, $lte: 1283378399999 }, IsClick: false }  nreturned:5000 2055ms
Wed Nov 16 16:28:40 getmore db.QueryLogRecordImpl cid:4312057226672898459 ntoreturn:5000 query: { Date: { $gte: 1283292000000, $lte: 1283378399999 }, IsClick: false }  bytes:232421 nreturned:5000 170ms
Wed Nov 16 16:30:27 getmore …
Run Code Online (Sandbox Code Playgroud)

performance cursor mongodb mongodb-java

4
推荐指数
1
解决办法
4124
查看次数

在java中创建一个mongodb上限集合

我想从Java代码创建一个上限集合.我找到了通过JavaScript创建它的语法,但找不到Java的示例.

Mongo mongo = new Mongo("127.0.0.1");
DB db = mongo.getDB("mydbid");

DBCollection collection;
if (db.collectionExists("mycollection")) {
        collection = db.getCollection("mycollection");
    } else {
        collection = /* ????? Create the collection ?????? */
    }
}
Run Code Online (Sandbox Code Playgroud)

mongodb-java

4
推荐指数
1
解决办法
6415
查看次数

mongodb脚本文件

我是mongodb的新手.

我们可以通过在关系数据库中的脚本.sql文件中指定它来执行查询列表,并且可以通过运行命令source c:\ test.sql来运行它.

我们怎么能在mongodb做到这一点?如何在mongodb脚本中存储这些命令以及如何在mongodb中执行?

mongodb mongodb-java

4
推荐指数
1
解决办法
4687
查看次数

mongodb java插入嵌入式文档

我有一个包含嵌入式文档的集合.

  System
  {
    System_Info: ...,

   Tenant: [ 
    { 
        Tenant_Id: ..., 
        Tenant_Info: ..., 
        Prop_Info: ...
    }, 
    { 
        Tenant_Id: ..., 
        Tenant_Info: ..., 
        Prop_Info: ...
    } ]
Run Code Online (Sandbox Code Playgroud)

}

如果我需要插入这样的另一个租户信息

     Tenant { Tenant_Id:2,Tenant_Info:"check",prop_info:"client"}.
Run Code Online (Sandbox Code Playgroud)

什么是mongodb查询插入嵌入文档?以及如何使用java做到这一点?

mongodb mongodb-java mongodb-query

4
推荐指数
1
解决办法
9039
查看次数

MongoDB中的命令和方法有什么区别?

在这个问题中,我指的是数据库命令JavaScript方法.

我想知道为什么MongoDB对命令和方法有两组不同的操作.首先我虽然这些命令是JavaScript中可用的操作的子集,但后来我意识到有像filemd5这样的命令没有[直接]作为方法可用.

我的问题是为什么命令和方法之间存在区别,以及为什么它们不能简单地是具有不同表示的同一组操作.命令1更适合声明性操作(例如通过REST提供),第二个适用于DB脚本.

mongodb mongodb-java

4
推荐指数
1
解决办法
1262
查看次数

安装MongoDB java驱动程序

我是Java和MongoDB世界的新手.我想使用MongoDB和Java.我已经下载了适用于java的MongoDB驱动程序.这是一个jar文件,我的问题是如何使用这个Jar文件.我用过这个命令但是我收到了一个错误:

java -jar mongo-java-driver-2.9.3-javadoc.jar 
Run Code Online (Sandbox Code Playgroud)

和错误:

没有主要的清单属性,在mongo-java-driver-2.9.3-javadoc.jar中

你能帮我解决一下这个问题吗?

java jar mongodb mongodb-java

4
推荐指数
1
解决办法
2万
查看次数

mongodb 3.x驱动程序Android兼容性

我正在开发一个使用java mongodb驱动程序3.0.3连接到mongodb的每个实例的Android应用程序.

通用连接的连接器代码是:

try{
    MongoCredential credential = MongoCredential.createCredential(user, dbname, pass.toCharArray());
    MongoClient mongoClient = new MongoClient( new ServerAddress(server , port ), Arrays.asList(credential));
    MongoDatabase db = mongoClient.getDatabase(dbname);
    System.out.println("Connect to database successfully ");
    Iterator i= mongoClient.listDatabaseNames().iterator();
    while (i.hasNext()){
        Log.d("DATABASE", (String) i.next());
    }
    Iterator ic= db.listCollectionNames().iterator();
    while (ic.hasNext()){
        Log.d("COLLECTION", (String) ic.next());
    }
}catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
Run Code Online (Sandbox Code Playgroud)

在运行时我有一些错误:

09-11 19:69:50.898 7418-7418/it.mysite.mongodbviewer W/org.bson.ObjectId:无法从JMX获取进程标识符,而是使用随机数而不是java.lang.NoClassDefFoundError:失败的解析:Ljava/lang /管理/ ManagementFactory;

com.mongodb.MongoException:java.lang.NoClassDefFoundError:com.mongodb.connection.ScramSha1Authenticator $ ScramSha1SaslClient

用这个生成一个循环:

我/艺术:拒绝在先前失败的类java.lang.Class上重新初始化

有人有解决方案吗?java/lang/management/ManagementFactory似乎不存在Android,你怎么解决?如果这是问题的中心.

在此先感谢,Matteo

PS:完整的日志是:

09-11 19:13:50.898    7418-7418/it.mysite.mongodbviewer W/org.bson.ObjectId? Failed …
Run Code Online (Sandbox Code Playgroud)

android mongodb mongodb-java

4
推荐指数
2
解决办法
4623
查看次数

如何在Java中添加到现有的MongoDB Bson过滤器

我正在使用Java的MongoDB 3.6.3和3.6.0 Mongo&Bson驱动程序。

给定以下过滤器:

import static com.mongodb.client.model.Filter.and;
import static com.mongodb.client.model.Filter.eq;
import static com.mongodb.client.model.Filter.gt;
.
.
.
   Bson filter = and(eq("field1", value),
                     gt("field2", value2));
Run Code Online (Sandbox Code Playgroud)

我需要有条件地添加另一个字段filter,以使其有效:

   Bson filter = and(eq("field1", value),
                     gt("field2", value2),
                     eq("field3", optionalValue));
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以通过将该字段附加到filter来执行此操作,还是必须单独创建过滤器?例如。

   Bson filter;
   if (optionFieldRequired)
   {
      Bson filter = and(eq("field1", value),
                        gt("field2", value2));
   }
   else
   {
      Bson filter = and(eq("field1", value),
                        gt("field2", value2),
                        eq("field3", optionalValue));
   }
Run Code Online (Sandbox Code Playgroud)

java mongodb bson mongodb-java

4
推荐指数
1
解决办法
5848
查看次数