Tag: mongodb query

MongoTemplate聚合 – 按日期分组

我正在尝试使用mongotemplate创建聚合查询,其中按日期(即2016-03-01)而不是datetime(即2016-03-01 16:40:12)进行分组。 dateToString操作存在于mongodb文档中,它可用于使用格式化从日期时间中提取日期: https : //docs.mongodb.org/manual/reference/operator/aggregation/dateToString/但我得到了它可以使用它mongotemplate – 我得到一个NullPointerException。 (我的db版本是3.2) List aggregationOperations = new ArrayList(); aggregationOperations.add( Aggregation.project(“blabla”, …). andExpression(“dateToString(‘%Y-%m-%d’,timeCreated).as(“date”)); aggregationOperations.add(Aggregation.group(“date”).sum(“blabla”).as(“blabla”)); AggregationResults aggregationResults = this.mongoTemplate.aggregate( Aggregation.newAggregation(aggregationOperations), collectionName, resultClass); 当我使用dayOfMonth(timeCreated)来提取日期时,没有例外,但是我找不到如何使用dateToString进行此操作的示例。 我尝试没有”作为日期格式,它也没有工作…… 这是我得到的例外: java.lang.NullPointerException at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:226) at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:194) at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:255) at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:194) at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:255) at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:194) at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:255) at org.bson.BasicBSONEncoder.putIterable(BasicBSONEncoder.java:324) at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:263) at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:194) at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:136) at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:36) at […]

我该如何解决MongoWaitQueueFullException?

我运行一个java程序,它是一个线程执行程序,它将数千个文档插入mongodb中的表。 我收到以下错误 Exception in thread “pool-1-thread-301” com.mongodb.MongoWaitQueueFullException: Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 500 has been exceeded. at com.mongodb.PooledConnectionProvider.get(PooledConnectionProvider.java:70) at com.mongodb.DefaultServer.getConnection(DefaultServer.java:73) at com.mongodb.BaseCluster$WrappedServer.getConnection(BaseCluster.java:221) at com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:508) at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:456) at com.mongodb.DBTCPConnector.getPrimaryPort(DBTCPConnector.java:414) at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:176) at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:159) at com.mongodb.DBCollection.insert(DBCollection.java:93) at com.mongodb.DBCollection.insert(DBCollection.java:78) at com.mongodb.DBCollection.insert(DBCollection.java:120) at ScrapResults103$MyRunnable.run(MyProgram.java:368) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at […]

如何从mongoDB数组中返回匹配的元素

我一直在寻找这个问题一周,我无法理解为什么它仍然无效…… 我有这个对象到我的MongoDB数据库: { produc: [ { cod_prod: “0001”, description: “Ordenador”, price: 400, current_stock: 3, min_stock: 1, cod_zone: “08850” }, { cod_prod: “0002”, description: “Secador”, price: 30, current_stock: 10, min_stock: 2, cod_zone: “08870” }, { cod_prod: “0003”, description: “Portatil”, price: 500, current_stock: 8, min_stock: 4, cod_zone: “08860” }, { cod_prod: “0004”, description: “Disco Duro”, price: 100, […]

使用$或$ in在Java中创建mongodb查询

我正在尝试使用mongodb api编写一个java代码来创建这个mongodb查询: { “$or”: [{“prd” : {“$in” : [“1234”, “0987”]}} , {“rsin” : “3228742”}]} 这是我到目前为止使用的代码: QueryBuilder builder = new QueryBuilder(); if (builder == null) { builder = QueryBuilder.start(); } if (mongoKey.equals(“prd”)){ ArrayList vals = new ArrayList(); for (int i=0; i < prdList; i++){ vals.add(prdList.get(i)); } DBObject obj = new BasicDBObject (mongoKey, new BasicDBObject("$in", vals)); builder.or(obj); […]

关闭MongoDB Java连接

我正在尝试设计一个Mongo Db连接类,我将MongoClient设置为静态。 private static MongoClient client = null; public static DB connectToMongo() throws Exception { if (null != client) { return client.getDB(DBNAME); } client = new MongoClient(HOST,PORT); return client.getDB(DBNAME); } 我的整个Web应用程序使用上面的方法连接到Mongo,如下所示: db = MongoDBConnection.connectToMongo(); collection = db.getCollection(“collectionName”); 执行数据库操作后,我从不为MongoClient调用close连接。 连接类总是会返回相同的MongoClient实例,它永远不会关闭。我关闭的唯一内容就是游标。 每次查询数据库时是否需要关闭MongoClient? 我的上述设计有效吗?

我们如何使用mongoTemplate为Mongodb Collection实现分页

我是mongoDb中的菜鸟我需要为任何特定的集合实现分页,比如说 我有一个Collection Foo,我有一个Fucntion,它返回Foo集合中的所有记录 public List getFoo(){ } 但是我需要通过实现分页从Foo中获取记录如何通过使用mongoTemplate Spring数据mongodb来实现这一点?

加密mongodb中的密码字段

我有以下代码,它将userName和password插入数据库,但密码以纯文本格式存储。 我的意思是当我查看数据库时,我可以看到插入的密码。 我想以encrypted格式存储password MongoClient client = new MongoClient(“localhost”,27017); DB db = client.getDB(“Test”); DBCollection collection = db.getCollection(“EncryptionDemo”); BasicDBObject documentDetail = new BasicDBObject(); documentDetail.put(“userName”, “admin12”); documentDetail.put(“password”, “12345”); collection.insert(documentDetail); 我怎样才能做到这一点?

聚合项目组通过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在MongoDB中执行批量更新文档

我正在使用MongoDB 3.2和MongoDB Java Driver 3.2。 我有一个包含数百个更新文档的数组,现在应该保存/存储在MongoDB 。 为了做到这一点,我迭代数组并为此数组中的每个文档调用updateOne()方法。 现在,我想通过批量更新重新实现此逻辑。 我尝试使用MongoDB Java Driver 3.2在MongoDB 3.2中找到批量更新的示例。 我试过这段代码: MongoClient mongo = new MongoClient(“localhost”, 27017); DB db = (DB) mongo.getDB(“test1”); DBCollection collection = db.getCollection(“collection”); BulkWriteOperation builder = collection.initializeUnorderedBulkOperation(); builder.find(new BasicDBObject(“_id”, 1001)).upsert() .replaceOne(new BasicDBObject(“_id”, 1001).append(“author”, “newName”)); builder.execute(); 但似乎这种方法基于过时的MongoDB Java Driver ,例如2.4并使用不推荐的方法。 我的问题: 如何使用MongoDB Java Driver 3.2在MongoDB 3.2中执行批量更新文档?

在上面的MongoDB 3.3.0中使用QueryBuilder和BasicDBObjectBuilder

第1部分 在Mongo 3.3.0中使用QueryBuilder跟踪查询Mongo Collection的解决方案,我尝试实现建议的方法来实现collection.find() 。 但是被不同的参数卡住了,传递了一个BasicDBObjectBuilder ,如下所示 – BasicDBObjectBuilder queryBuilder = BasicDBObjectBuilder.start(); query.getParams().entrySet().stream().forEach(entry -> queryBuilder.add(entry.getKey(), entry.getValue())); BasicDBObjectBuilder outputQuery = BasicDBObjectBuilder.start(); outputQuery.add(nameKey, 1); 这不编译: FindIterable tDocTypeList = collection.find(queryBuilder.get(), outputQuery.get()); 这也不会编译: FindIterable tDocTypeList = collection.find((Bson)queryBuilder.get(), (Bson)outputQuery.get()); 这也不会编译: org.bson.Document queryBuilder = new org.bson.Document(); query.getParams().entrySet().stream().forEach(entry -> queryBuilder.put(entry.getKey(), entry.getValue())); org.bson.Document outputQuery = new org.bson.Document(); outputQuery.put(nameKey, 1); FindIterable tDocTypeList = collection.find(queryBuilder, […]