我刚刚升级了 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中有任何实用函数吗?
我们有一个 mongo db 副本集配置,其中有 1 个主数据库和 2 个辅助数据库。我们已将读取首选项设置为,primary因为我们的辅助节点之一位于远程区域,并且不希望在该节点上进行读取操作。
如果我在调试模式下逐一运行 collection.find() 方法(该方法使用 MongoCursor 并迭代响应),我会看到所有调用都转到主函数。
上述可以通过2种方式验证:
slowms选项)但是,如果我在没有调试模式(更高的速度+负载)的情况下运行相同的操作,则两台服务器的 mongodb.log 都会开始显示查找操作。这是出乎意料的,因为我们希望调用仅转到主数据库而不是远程辅助数据库。此外,客户端上的 mongo 驱动程序日志显示命令仅发送到主 mongo 服务器。
此外,主 mongodb.log 和辅助 mongodb.log 的区别在于,辅助 mongodb.log 中的 readPreference 显示为“secondaryPreferred”(并且我们不在代码中的任何位置设置此首选项)。
在辅助 mongodb.log 中看到日志的原因可能是什么?
是否只是打印日志并且调用真的会转到主要?或者主服务器确实将调用转发到具有 secondaryPreferred 读取首选项的辅助服务器?
我正在使用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) 我想从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的新手.
我们可以通过在关系数据库中的脚本.sql文件中指定它来执行查询列表,并且可以通过运行命令source c:\ test.sql来运行它.
我们怎么能在mongodb做到这一点?如何在mongodb脚本中存储这些命令以及如何在mongodb中执行?
我有一个包含嵌入式文档的集合.
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做到这一点?
在这个问题中,我指的是数据库命令和JavaScript方法.
我想知道为什么MongoDB对命令和方法有两组不同的操作.首先我虽然这些命令是JavaScript中可用的操作的子集,但后来我意识到有像filemd5这样的命令没有[直接]作为方法可用.
我的问题是为什么命令和方法之间存在区别,以及为什么它们不能简单地是具有不同表示的同一组操作.命令1更适合声明性操作(例如通过REST提供),第二个适用于DB脚本.
我是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 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) 我正在使用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) mongodb-java ×10
mongodb ×8
java ×3
android ×1
bson ×1
bytebuffer ×1
cursor ×1
jar ×1
performance ×1
publisher ×1
reactor ×1