MongoDB java 驱动程序是否有可能备份和恢复数据库?
我现在的解决方案(只需执行命令):
public void makeBackUp(String path) {
try {
Runtime.getRuntime().exec("mongodump --out " + path);
} catch (IOException ex) {
Logger.getLogger(MongoDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void restore(String backUpPath) {
try {
Runtime.getRuntime().exec("mongorestore " + backUpPath);
} catch (IOException ex) {
Logger.getLogger(MongoDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我正在使用 MongoDB 的 Java 异步驱动程序版本 3.6,我没有看到findAndModify作为MongoCollection类的一部分实现的(我错了吗?),最接近的是findOneAndUpdate有人可以确认此操作将自动执行吗?
我了解并发更新是如何发生的。问题非常具体,是否原子(读+写)保证 findOneAndUpdate api 的原子性。这与询问如何使用 findAndmodify 不同。
我正在使用MongoOptions类及其方法
setFsync(boolean sync)
setJ(boolean safe)
setW(int val)
setWtimeout(int timeoutMS)
setSafe(boolean isSafe)
如何实现这一目标使用MongoClientOptions作为MongoOptions中depracated 蒙戈的Java驱动程序3.0.我开始了解MongoClientOptions用途
MongoClientOptions.builder()
创建一个新的Builder实例,然后追加属性.
如果我尝试在Document(BSON)中放置一个日期字段并将其写入Mongo,BSON会将其写入UTC.例如,约会
DateTime dateTime = new DateTime("2015-07-01");
Document doc = new Document("date", dateTime.toDate());
Run Code Online (Sandbox Code Playgroud)
将被存储为
"date" : ISODate("2015-06-30T18:30:00Z")
Run Code Online (Sandbox Code Playgroud)
在蒙戈.而且,如果我使用相同的Java驱动程序检索它,我会得到它
Wed Jul 01 00:00:00 IST 2015
Run Code Online (Sandbox Code Playgroud)
大.这个没有解决方案吗?我的意思是,为什么我不能按照自己的意愿存储日期?如果我需要从另一个时区查询数据库怎么办?我会得到不同的结果?日期字段是Mongo的重要组成部分,其中包含丰富的运算符.不过,为什么Mongo不提供这种灵活性?谢谢
我在mongodb Java教程中找到了有关如何从mongo集合中查询的信息,但是eq它们对我来说不起作用!您知道如何使用mongo和java过滤集合中的文档吗?
这是我的尝试:
package Database;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class StackOverflow {
public static void main(String[] args) {
// insert something to mongo:
final String URI = "mongodb://localhost:27017";
final String DB = "StackOverflowQuestion";
final String COLLECTION = "eqDoesntExcist";
MongoClientURI connection = new MongoClientURI(URI);
MongoClient mongo = new MongoClient(connection);
MongoDatabase database = mongo.getDatabase(DB);
MongoCollection<Document> collection = database.getCollection(COLLECTION);
Document doc = new Document("name", "Troy").append("height", 185);
collection.insertOne(doc);
doc = new …Run Code Online (Sandbox Code Playgroud) 如何仅使用 java-mongo-driver 触发 mongo 本机查询。
没有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: [] } }
}
])
Run Code Online (Sandbox Code Playgroud) 我想更改 java mongodb 驱动程序提供的连接池的默认大小,根据 mongo docs 为 100。
下面是我用来自定义连接池大小的 mongo 客户端 bean(参考这个问题)。我将 min 和 max connectionPerHost 属性都设置为 1 并运行 10 个与数据库交互的并行工作线程,以确保应用我的更改。
@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.getProperty("mongodbhost"), clientOptions));
return mongoClient;
}
Run Code Online (Sandbox Code Playgroud)
然后我计算了每个工作线程的开始和结束时间点。这样我就可以确定线程正在并行工作,并且这些配置没有改变我的连接池大小。有人可以帮我解决这个问题吗?任何帮助将不胜感激!
我正在使用聚合管道运行查找查询。在迭代从聚合执行返回的光标时,我注意到当 Mongo 发送 getMore 命令时程序挂起。我相信这个命令用于从数据库中获取下一批记录。
最初我使用 100 的批量大小进行测试,它相当快地获取 100 条记录,但是当它尝试获取下一组记录时,游标会挂起。我尝试了同样的方法,批量大小为 2,得到了相同的结果。
我正在使用 Mongo Java 驱动程序版本 3.6 和服务器 3.6.2。我还发现过去 python 驱动程序也出现过类似的问题(https://jira.mongodb.org/browse/PYTHON-276)。
过去有人经历过这种情况吗?任何的意见都将会有帮助。如果需要任何其他详细信息,请告诉我
我正在使用 mongo-java-driver
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我已经用排序规则创建了索引:
{
"v" : 2,
"key" : {
"version" : 1
},
"name" : "version_1",
"ns" : "db.sysversion",
"collation" : {
"locale" : "en",
"caseLevel" : false,
"caseFirst" : "off",
"strength" : 3,
"numericOrdering" : true,
"alternate" : "non-ignorable",
"maxVariable" : "punct",
"normalization" : false,
"backwards" : false,
"version" : "57.1"
}
}
Run Code Online (Sandbox Code Playgroud)
我已经使用 java 驱动程序实现了聚合查询:
Collation collation = Collation.builder().locale("en").numericOrdering(true).build();
ArrayList<Document> response = new ArrayList<>();
ArrayList<Bson> aggregate = new ArrayList<Bson>(Arrays.asList(
match(gt("version", "1.9.4")), …Run Code Online (Sandbox Code Playgroud) java collation mongodb aggregation-framework mongo-java-driver
我想使用 Java Driver 3.2 在 MongoDB 3.2 中执行查询,它同时包含$andand$or子句。
通过参考,我尝试了以下方法:
List<Document> criteria1 = new ArrayList<>();
List<Document> 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 Document("fetchStatus", new Document("$eq", PROCESSED_FETCH.getID())));
criteria2.add(new Document("isFullTextRet", new Document("$eq", false)));
BasicDBList or = new BasicDBList();
or.add(criteria1);
or.add(criteria2);
DBObject query = new BasicDBObject("$or", or);
ArrayList<Document> results = dbC_Coll.find(query).into(new ArrayList<>());
Run Code Online (Sandbox Code Playgroud)
当criteria1andcriteria2应该与$orwhile 内的criteria1子句连接时,$and应该应用。 …