Tag: mongodb

validation时,MongoDB java驱动程序3.0无法捕获exception

我是超级卡住o_0在尝试通过Java驱动程序进行身份validation时,存在捕获exception的问题。 你可能会看到甚至Throwable类都不起作用 private MongoClient mongoClient; private MongoDatabase mongoDatabase; public MongoConnection(String login, String password) { try { mongoClient = new MongoClient(asList(new ServerAddress(“localhost”), new ServerAddress(“localhost:27017”)), singletonList(MongoCredential.createCredential(login, “cookbook”, password.toCharArray()))); this.mongoDatabase = mongoClient.getDatabase(“cookbook”); } catch (Throwable e) { System.out.println(“exception”); } } 仍然没有抓住exception INFO: Adding discovered server localhost:27017 to client view of cluster Jan 29, 2016 7:46:27 PM com.mongodb.diagnostics.logging.JULLogger log […]

在数据大小超过500万时,从mongoDb中的java查询变慢

我的应用程序遇到了来自java的mongoDb中的find()操作的性能问题,当数据大小超过500万时,它需要花费大量的时间(有时需要几千毫秒来搜索单个文档)。 任何投入都表示赞赏。 🙂 java查询查询: db.test.find(“flag”:false, $or:[{“uni.phone”:”99********”},{“uni.mail”:”abc@test.com”}] mongoDb的索引: db.test.createIndex({“flag”:-1}) db.test.createIndex({“uni.phone”:1}) db.test.createIndex({“uni.mail”:1}) Mongo文件json: { “_id” : “912c2345-f95g-40bf-c871-f6135d3acd879”, “uni” : { “phone” : [ “99********” ], “email” : [ “abc@test.com” ] }, “comb” : false, “flag” : false, “combIds” : null, “Histories” : null, “creationDate” : “2017-06-14T17:03:44Z” } Mongo Stats :在这里捕获Mongo样本统计数据

MongoDB,Java:以UTC格式检索日期属性

我将一些实体保存到Mongo数据库,这些实体具有将UTC设置为时区的Joda DateTime属性。 虽然保存工作正常,但我在集合中看到具有正确值的属性,一旦我通过Java检索实体,时区再次设置为UTC + 2。 这是在集合中: “created” : ISODate(“2013-07-26T20:36:57.890Z”) 我正在使用Spring-Data-MongoDB来访问数据库。 Category category = mongoTemplate.findById(id, Category.class); 我最终得到了这个: 2013-07-26T23:05:56.439+02:00 有没有办法告诉Mongo确实返回日期中存储的时区? 提示赞赏,谢谢!

检查update / insert |中是否有错误 MongoDB Java驱动程序

我想检查insert失败 (由于集合中的unique = True索引)。 如果有错误做某事。 贝娄是我的代码的一个例子。 DBCollection user…; BasicDBObject Doc = new BasicDBObject(… ); String user_exists = user.insert(Doc).getError(); //insert the doc get error if any if(user_exists!=null){ //any errors? user.update(new BasicDBObject(…)); // error exists so do smthng } 上面的内容不起作用。 我相信String user_exists始终为null。 我怎样才能完成上述工作? 我已经看到了类似的SO问题,并提到了可以在insert()传递的WriteConcern 。 例如 coll.insert(dbObj, WriteConcern.SAFE); 来源: SO问题或Mongo文档 但是我不知道应该通过哪个字段(SAFE,ACKNOWLEDGED,UNACKNOWLEDGED等…)以获取错误。 也许我指的是错误的方向。 我不希望引发exception只是为了检查insert操作是否返回错误。

使用Morphia返回匹配的数组元素

我正在寻找一种方法,在提供一些conditions后过滤掉给定List of Object所有对象。 例如 A级 @Entity(value = “tbl_A”) public class A { private String notes; @Embedded private List sampleObject; ….getter and setter … } B级 @Embedded public class SampleObject { private boolean read; private boolean sentByBot; … getter and setter … } 现在,我只想收集已将sentByBot参数设置为true sentByBot 。 我使用以下方法: Query queryForA = datastore.find(A.class); queryForA.field(“sampleObject.sentByBot”).equal(false).retrievedFields(true, “sampleObject.sentByBot”); 上面的代码给出了包含sampleObject.sentByBot true和false的objects的完整列表。 我也尝试filter方法即 […]

在基于Date字段从MongoDB插入文档时遇到问题

我想插入一个包含Date字段的简单文档,如下所示: “Date” : ISODate(“2015-03-01T00:00:00.000+0000”) 但它将作为另一个日期ISODate(“2015-02-28T18:30:00.000+0000”)插入ISODate(“2015-02-28T18:30:00.000+0000”) 。 这是我的代码: MongoDatabase db = mongoclient.getDatabase(“myDB”); MongoCollection col = db.getCollection(“myCol”); SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSS+SSSS”) ; String oldDate = “2015-03-01T00:00:00.000+0000”; Date date = format.parse(oldDate); Document doc = new Document(); doc.put(“Date” , date); col.insertone(doc) System.out.println(col.find(doc).first());

使用spring-data-mongodb流式聚合操作的结果

我正在使用spring-data-mongodb,我想使用游标进行聚合操作。 MongoTemplate.stream()获取一个Query,所以我尝试创建Aggregation实例,使用Aggregation.toDbObject()将其转换为DbObject,使用DbObject创建BasicQuery ,然后调用stream()方法。 这将返回一个空光标。 调试spring-data-mongodb代码显示MongoTemplate.stream()使用FindOperation ,这使得thinkspring-data-mongodb不支持流聚合操作。 有没有人能够使用spring-data-mongodb来汇总聚合查询的结果? 为了记录,我可以使用Java mongodb驱动程序,但我更喜欢使用spring-data。 编辑 11月10日 – 添加示例代码: MatchOperation match = Aggregation.match(Criteria.where(“type”).ne(“AType”)); GroupOperation group = Aggregation.group(“name”, “type”); group = group.push(“color”).as(“colors”); group = group.push(“size”).as(“sizes”); TypedAggregation agg = Aggregation.newAggregation(MyClass.class, Arrays.asList(match, group)); MongoConverter converter = mongoTemplate.getConverter(); MappingContext<? extends MongoPersistentEntity, MongoPersistentProperty> mappingContext = converter.getMappingContext(); QueryMapper queryMapper = new QueryMapper(converter); AggregationOperationContext context = new TypeBasedAggregationOperationContext(MyClass.class, […]

查询MongoDB Map Reduce函数

我已经流式传输并将大约25万条推文保存到MongoDB中,在这里,我正在检索它,正如您所看到的,基于推文中出现的单词或关键字。 Mongo mongo = new Mongo(“localhost”, 27017); DB db = mongo.getDB(“TwitterData”); DBCollection collection = db.getCollection(“publicTweets”); BasicDBObject fields = new BasicDBObject().append(“tweet”, 1).append(“_id”, 0); BasicDBObject query = new BasicDBObject(“tweet”, new BasicDBObject(“$regex”, “autobiography”)); DBCursor cur=collection.find(query,fields); 我想要做的是使用Map-Reduce并根据关键字对其进行分类并将其传递给reduce函数来计算每个类别下的推文数量,有点像你在这里看到的。 在这个例子中,他正在计算页数,因为它是一个简单的数字。 我想做的事情如下: “if (this.tweet.contains(“kword1”)) “+ “category = ‘kword1 tweets’; ” + “else if (this.tweet.contains(“kword2″)) ” + “category = ‘kword2 tweets’; 然后使用reduce函数来获取计数,就像在示例程序中一样。 我知道语法不正确,但这就是我想做的事情。 […]

使用Spring Data在$ project MongoDB中使用$ filter

我有一个子文档,它是父文档的数组。 “设备” 在那个数组中,我有一个属性是Date属性。 我想通过确定的日期找到包含子子文档的父文档,如下所示: { “_id” : ObjectId(“5818fa596969a1339093a7da”), “fecha” : ISODate(“2016-11-01T05:00:00.000Z”), “spot” : “5808e3926969a126c8365c94”, “devices” : [ { “evaluationDate” : ISODate(“2016-11-01T20:26:00.000Z”), “seenTimesCounter” : 0, “category” : “PRE_PASAJERO”, “status” : “NO_CONECTADO” }, { “evaluationDate” : ISODate(“2016-11-01T20:26:00.000Z”), “seenTimesCounter” : 0, “category” : “PRE_PASAJERO”, “status” : “NO_CONECTADO” }, { “evaluationDate” : ISODate(“2016-11-01T20:26:00.000Z”), “seenTimesCounter” : 0, “category” : “PRE_PASAJERO”, […]

使用java获取mongoDB中的打开连接数

我的程序需要打开大量连接(Mongo)。 我收到错误: 打开的连接太多,无法再打开 经过819次联系。 我已经知道我们可以增加这个限制。 但这不是我的想法。 我正在考虑关闭MongoClient对象,然后在800个连接后再次创建一个新对象。 我的想法是,使用新的mongoClient对象将关闭所有连接,当我再次启动/创建它时,连接将再次打开直到800.因此不会给出错误。 (如果这种方法完全错误/不会给出所需的结果,请告诉我。) 为此,我需要知道ATM打开的连接数。 有没有办法使用java获取此信息?