Tag: mongodb

Spring-data-mongodb连接到一个Mongo实例中的多个数据库

我使用的是最新的spring-data-mongodb(1.1.0.M2)和最新的Mongo Driver(2.9.0-RC1)。 我有一种情况,我有多个客户端连接到我的应用程序,我想在同一个Mongo服务器中给每个客户端自己的“架构/数据库”。 如果我直接使用驱动程序,这不是一项非常困难的任务: Mongo mongo = new Mongo( new DBAddress( “localhost”, 127017 ) ); DB client1DB = mongo.getDB( “client1” ); DBCollection client1TTestCollection = client1DB.getCollection( “test” ); long client1TestCollectionCount = client1TTestCollection.count(); DB client2DB = mongo.getDB( “client2” ); DBCollection client2TTestCollection = client2DB.getCollection( “test” ); long client2TestCollectionCount = client2TTestCollection.count(); 看,很容易。 但是spring-data-mongodb不允许使用多个数据库的简单方法。 设置与Mongo的连接的首选方法是扩展AbstractMongoConfiguration类: 您将看到重写以下方法: getDatabaseName() 因此它强制您使用一个数据库名称。 然后构建的存储库接口使用传递到SimpleMongoRepository类的MongoTemplate中的数据库名称。 我到底在哪里粘贴多个数据库名称? […]

使用Java Spring连接到MongoDB 3.0

我在使用Spring访问带有凭据的MongoDB时遇到了问题。 虽然没有凭据,它就像一个魅力,使用它们只是失败说 Failed to authenticate to database [yourdatabase], username = [yourusername], password = [x******z] 必须是因为新的auth默认值,您可以在http://docs.mongodb.org/manual/core/authentication/中阅读 在3.0版中更改:SCRAM-SHA-1是从3.0系列开始的MongoDB版本的默认机制。 问:有人发现了一种使用Spring凭证的方法吗? 您使用哪个版本的spring-data-mongodb来制作技巧?

spring-data-mongo – 可选的查询参数?

我使用spring-data mongo和基于JSON的查询方法,并且不确定如何在搜索查询中允许可选参数。 例如 – 说我有以下function @Query(“{ ‘name’ : {$regex : ?0, $options : ‘i’}, ‘createdDate’ : {$gte : ?1, $lt : ?2 }} }”) List getItemsLikeNameByDateRange(String name, Date startDateRange, Date endDateRange); – 但我不想应用名称正则表达式匹配,或者如果将NULL值传递给方法,则不应用日期范围限制。 目前,我可能不得不使用mongoTemplate构建查询。 有没有其他选择 – 或者使用mongoTemplate是最好的选择吗? 谢谢

Mongodb避免重复输入

我是mongodb的新手。 我可以知道如何避免重复输入。 在关系表中,我们使用主键来避免它。 我可以知道如何使用java在Mongodb中指定它吗?

编码对象时未使用MongoDB BSON编解码器

我正在尝试将对象存储在MongoDB数据库中(使用MongoDB 3.0.2)并在尝试使用错误消息对对象进行编码时收到CodecConfigurationException Can’t find a codec for class java.time.LocalDate. 我已经编写并包含了LocalDate对象的编解码器。 细节如下。 我试图存储的对象DutyBlock具有以下成员变量: public class DutyBlock { private LocalDate startDate; private LocalDate endDate; //Inclusive private int blockLength; private double pointValue; private ArrayList assigned; } 我编写了以下编解码器来编码数据库中的DutyBlock对象: public class DutyBlockCodec implements Codec { @Override public void encode(BsonWriter writer, DutyBlock t, EncoderContext ec) { Document document = new Document(); […]

将BSON类型ObjectId转换为JSON(存储在Mongodb中)-Java

new Gson()。toJson(new ObjectId()) 当我做上述操作时,我得到的输出是 “_id”:{“_ time”:1374347520,“_ machine”:-1025067326,“_ EN”:585905201,“_ new”:false} 但实际上我希望它成为 “_id”:{ “$ OID”:51eae100c2e6b6c222ec3431} 这是通常的mongodb ID格式。 Java的优选方法是什么? 更新: 我的价值对象 import com.google.gson.annotations.SerializedName; import org.bson.types.ObjectId; public class TaskObject { @SerializedName(“_id”) private ObjectId _id; @SerializedName(“revNo”) private int revNo; } 我试图用自定义_id将其存储到mongodb TaskObject taskObject = new TaskObject(); taskObject.set_id(new ObjectId()); TaskMongoDBClient.getInstance(). persistNewTaskData(new Gson().toJson(taskObject)); 存储在mongodb中的内容如下所示。 _id:{“_ time”:1397464341,“_ machine”:1441187434,“_ EN”: – 1687457948,“_ new”:true} 而不是_id:{“$ […]

如何在spring mongodb中检索数组中的匹配元素?

我试图检索具有特定“_id”的文档和具有另一个特定“_id”的单个嵌入文档。 我的文档代表一个目录,它包含一系列课程。 示例数据: ‘_id’: ObjectId(‘1111’), ‘name’: ‘example catalog’, … … ‘courses’: [ { ‘_id’: ObjectId(‘2222’), ‘name’: ‘my course’, … }, { …. } 在mongod中我运行这个聚合查询,然后回到我想要的: db.getCollection(‘catalogs’).aggregate( { $match: { ‘_id’: ObjectId(’58e8da206ca4f710bab6ef74′) } }, { $unwind: ‘$courses’ }, { $match: { ‘courses._id’: ObjectId(’58d65541495c851c1703c57f’) } }) 正如我之前提到的,我已经找回了单个目录实例,其中包含一个课程实例。 在我的java回购中,我试图做同样的事情: Aggregation aggregation = Aggregation.newAggregation( Aggregation.match(Criteria.where(Catalog.ID_FIELD).is(catalogId)), Aggregation.unwind(Catalog.COURSES_FIELD, true), Aggregation.match(Criteria.where(Catalog.COURSES_FIELD + ‘.’ […]

MongoDB $ aggregate $ push Java Spring Data中的多个字段

我有一个mongo聚合组查询: db.wizard.aggregate( { $group: { _id: “$title”, versions: { $push: {version:”$version”, author:”$author”, dateAdded:”$dateAdded”}} } }) 我需要在Java Spring-Data-MongoDB中使用此查询,我目前的解决方案如下所示: Aggregation agg = Aggregation.newAggregation( Aggregation.group(“title”). push(“version”).as(“versions”) ); 问题是我不知道如何为push方法添加更多字段(版本,作者,dateAdded)。 是否可以使用Spring-Data-MongoDB?

使用MongoDB驱动程序时的java.lang.NoClassDefFoundError

我正在尝试使用servlet上的Java驱动程序连接到mlab上托管的MongoDB数据库。 import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; public class MongoConnection { protected void connectToMongo(String loc){ String dbName = “readings”; String collection = “data”; MongoClientURI uri = new MongoClientURI(“mongodb://user:pass@ds143109.mlab.com:43109/readings”); MongoClient client = new MongoClient(uri); MongoDatabase db = client.getDatabase(dbName); MongoCollection readings = db.getCollection(collection); Document doc = Document.parse(loc); readings.insertOne(doc); client.close(); } } 问题是我收到以下错误: java.lang.NoClassDefFoundError: […]

Spring数据mongodb – ‘cursor’选项是必需的

我正在尝试使用Spring Data MongoDB 3.6-rc4执行聚合操作。 Aggregation agg = newAggregation( lookup(“orders”, “orderId”, “_id”, “order”) ); List results = mongoOperations.aggregate(agg, “transactions”, BasicDBObject.class).getMappedResults(); 但是在运行查询时遇到以下错误 2017-11-24 17:03:41,539 WARN org.springframework.data.mongodb.core.MongoTemplate : Command execution of { “aggregate” : “transactions” , “pipeline” : [ { “$lookup” : { “from” : “orders” , “localField” : “orderId” , “foreignField” : “_id” , “as” : “order”}}]} […]