【问题标题】:get MongoDatabase with spring data mongodb使用spring数据mongodb获取MongoDatabase
【发布时间】:2017-08-23 22:51:30
【问题描述】:

我正在尝试无限期地跟踪 mongo oplog 集合。我目前使用的代码如下。

MongoClient mongoClient = new MongoClient(<host>,<27017>);

MongoCollection oplogColl =
                   mongoClient
                           .getDatabase("local")
                           .getCollection("oplog.rs");

MongoCursor oplogCursor =
                   oplogColl
                           .find(new Document("ts", filter))
                           .cursorType(CursorType.TailableAwait)
                           .noCursorTimeout(true)
                           .sort(new Document("$natural", 1))
                           .iterator();

我正在尝试使用 spring-data 获得相同的实现,其中将在属性文件中指定 mongo uri。因此我需要访问 MongoDatabase 或 MongoClient。

在 spring 中尝试使用 MongodbFactory 类,但它返回了一个 DB 类型的实例,这是访问 mongo 的旧 mongo 实现。

如何使用 Spring Data 使用 MongoDatabase/MongoCollection/MongoClient。

【问题讨论】:

  • Google 是你的朋友。
  • 阿比吉特·萨卡尔。我只是在搜索后才在这里问了一个问题。如果您觉得在 google 中得到这个答案很简单,那么为什么不在这里提供答案。
  • 刚刚做了,我用了不到 10 分钟。我之前没有这样做的原因是因为你没有表现出任何努力。

标签: spring mongodb spring-data spring-data-mongodb


【解决方案1】:

MongoClient 扩展了Mongo,所以

@Configuration
public class AppConfig {
   public @Bean Mongo mongo() throws UnknownHostException {
       return new Mongo("localhost");
   }
}

如果你不想直接编写 Mongo 类

/*
* Factory bean that creates the com.mongodb.Mongo instance
*/
@Bean
public MongoClientFactoryBean mongo() {
    MongoClientFactoryBean mongo = new MongoClientFactoryBean();
    mongo.setHost("localhost");
    return mongo;
}

编辑

@Configuration
public class AppConfig {
   public @Bean MongoClient mongo() throws UnknownHostException {
       return new MongoClient("localhost");
   }
}

用法:

@Autowired
private Mongo mongo;

MongoOperations mongoOps = new MongoTemplate(mongo, "databaseName");

编辑

@Autowired
private MongoClient mongoClient;

MongoOperations mongoOps = new MongoTemplate(mongoClient, "databaseName");

【讨论】:

  • 最新的 mongo 驱动程序不鼓励使用 com.mongodb.Mongo 类。这就是我问题的重点。 Spring-data-mongodb 提供了 MongoDbFactory,而后者又提供了 com.mongodb.DB。你的答案使用 com.mongodb.Mongo。所有这些类(以及 BasicDBObject 等)通常不与最新的驱动程序一起使用。我正在尝试找到一种可以使用 MongoDatabase/MongoCollection/MongoClient 等较新类的方法。 1)在得出结论之前,您需要了解被问到的内容。 2)您需要更新自己的mongo java驱动程序。
  • @samo 您想使用MongoClient,但它扩展了您声称不推荐的Mongo?如果您愿意,可以从返回 Mongo 的位置返回 MongoClient 的实例。 1)阅读理解问题? 2)您需要更新自己的继承 101。
  • mongodb.com/blog/post/introducing-mongoclient.. 阅读以下行:“Mongo,那个类将保持旧的默认值,并被弃用”和“旧的类将保留一段时间(但不会永远存在),这样我们现在就不会破坏旧代码”。
  • @samo 由于您显然无法理解简单的说明,请参阅我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2021-12-11
相关资源
最近更新 更多