Tag: mongodb

MongoDB 3 Java检查集合是否存在

我有以下问题: 我正在使用MongoDB 3的Java驱动程序。 在版本2中,可以执行DB.collectionExists(name)来检查所选数据库中是否存在集合。 在从DB切换到MongoDatabase的版本3中,此方法不再存在。 如何确定数据库中是否存在集合? 我尝试使用listCollectionNames()迭代集合,但这看起来非常无效。 谢谢你的帮助

使用MongoDb创建索引

我是MongoDB的初学者,我正在尝试一些东西。 我想存储URL并避免重复的URL我在url上创建了一个唯一的索引。 像那样 collection.createIndex(new BasicDBObject(“url”, type).append(“unique”, true)); 但每次我启动我的程序时,索引再次创建不是吗? 因为,现在我的程序只插入一个URL“http://site.com”,如果我重新启动我的程序,这个url会再次插入,就像没有索引一样。 每次创建索引是处理索引的错误方法吗? 这是我的代码示例 mongo.getCollection().ensureIndex(new BasicDBObject(“url”, 1).append(“unique”, “true”)); mongo.getCollection().insert(new BasicDBObject(“url”, “http://site.com”).append(“crawled”, 0)); mongo.getCollection().insert(new BasicDBObject(“url”, “http://site.com”).append(“crawled”, 0)); 并输出: { “_id” : { “$oid” : “50d627cf44ae5d6b5e9cf106”} , “url” : “http://site.com” , “crawled” : 0} { “_id” : { “$oid” : “50d627cf44ae5d6b5e9cf107”} , “url” : “http://site.com” , “crawled” : 0} 谢谢 […]

如何使用MongoRepository与spring数据一起使用查询注释时显示查询

我在spring boot中使用MongoRepository来访问mongo: public interface MongoReadRepository extends MongoRepository { @Query(value = “{$where: ‘this.name == ?0’}”, count = true) public Long countName(String name); } 它可以工作,但我想知道它访问mongo的确切查询 怎么做? 我尝试在以下属性中添加一些配置: logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG logging.level.org.springframework.data.mongodb.repository.Query=DEBUG 并且不工作。 有人可以帮忙吗?

Mongo打开了太多连接

我试图在Java循环中向MongoDB写入大量数据。 我根据打开的连接数得到错误。 我的理论是,由于MongoDB不是事务性的,因此可以同时打开许多连接。 然而,Java代码也能够非常快地循环,在一定时间之后循环迭代的次数开始超过可用连接的数量并且Mongo碰到墙。 我的代码看起来像这样。 我已经看到它建议不要做m.close()但是你只是更快地得到错误。 public static void upsert(){ Mongo m = null; DB db = null; try { m = new Mongo(“localhost”); db = m.getDB(“sempedia”); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (MongoException e1) { e1.printStackTrace(); } // create documents // I am doing an upsert – hence the doc, doc DBCollection […]

将JSON结构转换为BasicDBObject

我想将以下json结构转换为java中的BasicDBOject并插入到mongo db中。 我的JSON结构是 { “it”: { “batch”: “2013”, “students”: [ { “name”: “joe” }, { “name”: “john” } ] } }

如何在Spring Data MongoDB中仅返回查询的特定字段?

我们如何在Spring Data Mongo中选择特定字段。 我尝试了以下但是我从Foo到String得到了exception。 使用@Query @Query(value=”{path : ?0}”, fields=”{path : 0}”) String findPathByPath(String path); 非@Query String findPathByPath(String path); 这是文档模型 @Document(collection = “foo”) public class Foo { String name, path; … }

如何在Spring Rest Call中使用GridFS从Mongo发送检索到的图像?

我使用Spring Data和GridFs Template从Mongo DB中检索了图像 所以我不知道如何将检索到的输入流提供给用户。 假设他们要求http://host.com/apple作为春季rest电话 。 现在我的应用程序使用名称apple处理请求,它从mongodb数据库中检索苹果图像。 现在没有保存在任何地方我想将响应显示为用户的图像,将在浏览器中显示http://host.com/apple图像。 我究竟需要如何实现这个? 你可以分享任何代码库来处理Rest Call中的图像请求吗? Controller Code @RestController public class GreetingController { @RequestMapping(“/image”) public GridFSDBFile imageReponse() { App.getImage(); return App.getImageResponse(); } } 此函数将从mongodb中获取图像 public static GridFSDBFile getImageResponse() { try { ApplicationContext context = new FileSystemXmlApplicationContext( “file:C:\\workspace\\gs-rest-service-complete\\spring-config.xml”); FileStorageDao fileStorageDao = (FileStorageDao) context .getBean(“fileStorageDao”); GridFSDBFile retrive = fileStorageDao.retrive(“audi.jpg”); return retrive; […]

在MongoDB中打开连接的SocketTimeout

我有一个Java应用程序在MongoDB上执行一些聚合,但有时它只是挂起并抛出一个SocketTimeoutexception。 在exception之后,应用程序将运行正常(稍微,然后它可能会再次引发exception)。 我刚刚发现这个解释似乎是可能的原因,但我不确定。 我初始化MongoClient并保持与DB的连接打开。 我不确定这是否是一个问题,我应该每次都得到数据库,然后让数据库被垃圾收集(并关闭连接)。 另一种方法可能是定期ping Mongo以保持连接池“新鲜”。 使用的客户端是这样的: public class DbClient { private static MongoClient mongoClient; private static MongoDatabase db; private DbClient() {} public static void init() throws Exception { mongoClient = new MongoClient(); } public static MongoDatabase getDB() { if(mongoClient == null) throw new IllegalStateException(“Client not initialized!”); if(db == null) { db = mongoClient.getDatabase(“my_db”); […]

聚合项目组通过Spring Data提取日,月和年

要直接,我该怎么做: group._id = { year: { $year : [{ $subtract: [ “$timestamp”, 25200000 ]}] }, month: { $month : [{ $subtract: [ “$timestamp”, 25200000 ]}] }, day: { $dayOfMonth : [{ $subtract: [ “$timestamp”, 25200000 ]}] } }; 用spring数据 我已经尝试了这个和其他一些forms并没有成功 Aggregation aggregation = Aggregation.newAggregation( Aggregation.match(c), Aggregation.project(“programa”, “custo”, “duracao”, “dataHora”) .andExpression(“dataHora”).minus(25200000).extractDayOfMonth().as(“dia”) .andExpression(“dataHora”).minus(25200000).extractMonth().as(“mes”) .andExpression(“dataHora”).minus(25200000).extractYear().as(“ano”), Aggregation.group(“programa”, “ano”, “mes”, […]

使用Java的Mongo 3.2驱动程序的新聚合function

我想在Mongo 3.2中执行聚合,如此处所述,但在Java中: https://docs.mongodb.org/master/reference/operator/aggregation/lookup/#pipe._S_lookup 目前我在java中的查询对象非常简单: Document query = new Document(); query.append(“employeId”, employeId); 除了通过employeId过滤,我想加入这个集合与公司(其中employee.company_id = company.id) 我怎么能用Java做到这一点? 好像我找不到这个新的Mongofunction的文档。 编辑 员工收集示例: { “id” : 1, “name” : “John”, “lastName” : “Moore”, “age” : 44, “companyId”: 10 } 公司集合示例: { “id” : 10, “companyName” : “Microsoft”, “numEmployee” : 100 } 预期输出的示例 { “id” : 1, “name” : “John”, “lastName” […]