Tag: mongodb

使用MongoDB 3.0 Java驱动程序计算结果

我只是想获得一些查询的结果数量。 具体来说,我想知道过去15分钟内有多少用户在线。 所以,我设置连接: mongoClient = new MongoClient(“localhost”, 3001); database = mongoClient.getDatabase(“database1”); 然后在我的方法中我得到集合并发送查询…: MongoCollection users = database.getCollection(“users”); users.find(and(gte(“lastlogin”,xvminago),lte(“lastlogin”,now) 我甚至不确定最后一步是否正确。 但是在Javascript和.count()中这似乎很容易 – 我在Java中找不到的操作。 而文档是奇怪的,并且不知何故都是不同的。 (我使用MongoDB Java Driver 3.0)

MongoDB游标(OutOfMemory)中的内存泄漏?

这就是我正在阅读我的大型MongoDB表(每个对象在其属性中都有非常大的数据块): DBCursor cursor = collection.find(/* my query */); while (cursor.hasNext()) { DBObject object = cursor.next(); doSomething(object); // no data stays in memory } cursor.close(); 我越来越: java.lang.OutOfMemoryError: Java heap space at java.lang.StringCoding$StringDecoder.decode(Unknown Source) at java.lang.StringCoding.decode(Unknown Source) at java.lang.String.(Unknown Source) at org.bson.BasicBSONDecoder$BSONInput.readUTF8String(BasicBSONDecoder.java:463) at org.bson.BasicBSONDecoder.decodeElement(BasicBSONDecoder.java:155) at org.bson.BasicBSONDecoder._decode(BasicBSONDecoder.java:79) at org.bson.BasicBSONDecoder.decode(BasicBSONDecoder.java:57) at com.mongodb.DefaultDBDecoder.decode(DefaultDBDecoder.java:56) at com.mongodb.Response.(Response.java:83) at com.mongodb.DBPort.go(DBPort.java:124) at com.mongodb.DBPort.call(DBPort.java:74) at […]

如何通过Java驱动程序正确连接到Atlas M0(Free Tier)集群?

尝试使用MongoDB版本3.6通过Java驱动程序连接Atlas集群。 所以,我写的像: MongoClientURI uri = new MongoClientURI(“mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true”); MongoClient mongoClient = new MongoClient(uri); 在这种情况下,错误是: java.lang.IllegalArgumentException: The connection string is invalid. Connection strings must start with ‘mongodb://’ at com.mongodb.ConnectionString.(ConnectionString.java:203) at com.mongodb.MongoClientURI.(MongoClientURI.java:176) at com.mongodb.MongoClientURI.(MongoClientURI.java:158) at project.Bot.check(Bot.java:30) at project.Bot.onUpdateReceived(Bot.java:104) at java.util.ArrayList.forEach(ArrayList.java:1249) at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27) at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309) 当程序以不使用+srv MongoDB 3.6或更高版本的代码段开头时: MongoClientURI uri = new MongoClientURI(“mongodb://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true”); MongoClient mongoClient = new MongoClient(uri); 我收到一个错误: […]

索引如何提高mongodb中的查询性能

我需要知道如何使用mongo中的索引来提高查询性能。 目前我的数据库没有编入索引。 如何索引现有数据库。? 另外,我需要创建一个仅用于索引的新字段。

MongoDB:查询有隐式限制(256)?

我在MongoDB中创建了(在代码中)一个默认集合并且正在查询它,并且发现当我在本地运行它时代码将返回所有数据,但是当我在部署服务器上查询它时它不会。 它最多返回256条记录。 笔记: 这不是上限集合。 在本地,我运行3.2.5,远程MongoDB版本是2.4.12 我没有使用limit参数。 当我使用它时,我可以限制本地服务器和部署服务器,但部署服务器仍将永远不会返回超过256条记录。 从服务器获取的数据量<500K。 没什么大不了的。 代码在Clojure中,使用Monger,它本身只调用Java com.mongodb。 我可以使用Robomongo从远程服务器获取超过256条记录,虽然我不知道它是如何做到的,因为我无法从命令行连接到远程(auth使用相同的凭据失败,所以我猜版本那里不相容)。 任何帮助表示赞赏。 更新:找到触发问题的东西:当我对输出进行排序时,它会将输出减少到256 – 但只有当我从Mongo 2.4中拉出时! 我不知道这是MongoDB本身,MongoDB java类还是Monger,但这里是解释问题的代码,就像我可以做到的那样简单: (ns mdbtest.core (:require [monger.core :as mg] [monger.query :as mq])) (defn get-list [] (let [coll (mq/with-collection (mg/get-db (mg/connect {:host “old-mongo”}) “mydb”) “saves” (mq/sort (array-map :createdDate -1)))] ;;<<==remove sort coll))

Spring Data REST:MongoDB存储库的自定义查询

我正在尝试从Spring指南创建自定义查询:根据参考4.4自定义实现 使用REST访问MongoDB数据 。 但是我的自定义方法不能从存储库的REST接口(/ user / search)中获得。 (例如,浏览器无法找到localhost:8080 / user / search / GetByKidsAge?age = 1) 有人可以帮我解决这个问题并给我一些建议吗? 非常感谢 !! 以下是我的代码: UserRepositoryCustom.java public interface UserRepositoryCustom { public List GetByKidsAge(@Param(“age”) int age); } UserRepositoryImpl.java public class UserRepositoryImpl implements UserRepositoryCustom { @Override public List GetByKidsAge(int age) { return /*perform query*/; } } UserRepository.java @RepositoryRestResource(collectionResourceRel = “user”, path = […]

使用Java MongoDb驱动程序的Bson漂亮打印

我使用Java MongoDB驱动程序3.3版使用Mongo聚合框架。 我有一个聚合管道 ,它只是List类型的集合。 我试图找到一种方法来打印管道的每个阶段。 在每个元素上调用toString方法是不够的,因为每个阶段都是Bson接口的简单实现的实例,即SimplePipelineStage 。 这个愚蠢的类没有任何toString方法的重写。 使用mongo java驱动程序Aggregates类的工厂方法创建管道,如下所示: Aggregates.match(/* … */) Aggregates.project(/* … */) // And so on… Javadoc可以在这里找到。 我怎么能打印这样的物体? 我确信BasicDbObject类型有一个智能的toString实现,但我找不到从Bson转换为Bson的BasicDbObject 。 非常感谢提前。

从String转换为MongoDB ObjectID

我尝试将我的String ID转换为MongoDB ObjectID public class relevancy_test extends Object implements Comparable { public static void main(String[] args) throws UnknownHostException { MongoClient mongo = new MongoClient(“localhost”, 27017); DB mydb = mongo.getDB(“test”); DBCollection mycoll = mydb.getCollection(“mytempcoll”); BasicDBObject query = null; Map updateMap = new HashMap(); List dbobj = null; DBCursor cursor = mycoll.find(); dbobj = cursor.toArray(); for (DBObject […]

MongoDB – Java | 如何管理连接

我正在使用带有Java的MongoDB,并且对我的连接有一些问题和疑问。 首先,我应该如何连接到Mongo? 我应该使用静态客户端并将其保持打开状态吗? 因为连接需要500ms。 因此,当用户需要数据时始终连接它并不是最好的主意,是吗? 但接下来的问题是。 当我执行一些查询时,我收到错误消息java.lang.IllegalStateException: The pool is closed或java.lang.IllegalStateException: state should be: open 。 那么,我应该如何管理我的整个MongoDB连接? 始终等待500毫秒是缓慢和重新启动服务器的方式,就像10个连接不是那么好。 还有其他好方法吗? 感谢您的帮助!

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

执行以下聚合管道: public void getMostLikedItems () { UnwindOperation unwind = Aggregation.unwind(“favoriteItems”); GroupOperation group = Aggregation.group(“favoriteItems”).count().as(“likes”); SortOperation sort = Aggregation.sort(Sort.Direction.DESC, “likes”); Aggregation aggregation = newAggregation(unwind, group, sort); DBObject result = mongoTemplate.aggregate(aggregation, “users”, LikedItem.class).getRawResults(); } 抛出以下exception: com.mongodb.MongoCommandException: Command failed with error 9: ‘The ‘cursor’ option is required, except for aggregate with the explain argument’ on server localhost:27017. The […]