标签: mongodb-java

Java MongoDB查询条件(WHERE日期> X和字段=值)忽略第二个子句

import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

public class CustomQuery {

  @Autowired private MongoOperations mongoOperations;    

  public void customQuery(Date submittalDate) {

     List<Question> q1s = mongoOperations.find(
        new Query(Criteria.where("category").is("New")), 
        Question.class);

     List<Question> q2s = mongoOperations.find(
      new Query(
        Criteria.where("submittalDate").gt(submittalDate).and("category").is("New")
      ),
      Question.class);
  }
}
Run Code Online (Sandbox Code Playgroud)

顶级的Spring Java MongoDB查询返回了预期的结果q1s.

底部查询应返回顶部查询的子集.相反,匹配的记录("submittalDate").gt(submittalDate)q2s结果中,无论它们是否在"新"类别中.

即它就像是and("category").is("New")从第二个查询被忽略.

使用带有Spring Data的32位Mongodb版本v2.0.6.

帮助赞赏.

更新05/09/2012

仍然无法正常工作

更新26/08/2012

这将返回Mongo命令行上的结果:

db.foo.find( {   "submittalDate":{ "$gte": ISODate("2012-07-31T23:00:00.000Z")  }, "category" : "New"    } )
Run Code Online (Sandbox Code Playgroud)

相反,Java代码(对于相同的日期参数)不起作用.为了比较,DEBUG从Java记录的查询是:

[DEBUG] [http-8080-1] (MongoTemplate.java:doFind:1256) find using …
Run Code Online (Sandbox Code Playgroud)

java mongodb-java

5
推荐指数
1
解决办法
9870
查看次数

使用spring-data-mongodb保持包含对象的对象

以下是问题13832188的后续问题:

我正在使用spring-data-mongodb版本1.1.1.RELEASE.如果所有成员变量都是基本类型,我能够持久化对象,即使@PersistenceConstructor参数的名称与使用@Field@Value注释的成员变量的名称不完全匹配也是如此.

但是,MappingInstantiationException当我尝试持久化包含其他对象的对象时,我得到了一个.我的问题:

  • 这是一个错误spring-data-mongodb或我做错了什么?
  • 需要更改哪些内容才能正确保存包含对象的对象?

.

org.springframework.data.mapping.model.MappingInstantiationException: Could not instantiate bean class [com.recorder.TestRecorder2$ObjectContainer]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:77)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:229)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:209)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:173)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:169)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:72)
    at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1820)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1542)
    at org.springframework.data.mongodb.core.MongoTemplate.findAll(MongoTemplate.java:1064)
    at com.recorder.TestRecorder2.testObjectContainer(RecorderTest2.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at …
Run Code Online (Sandbox Code Playgroud)

java naming-conventions mongodb-java spring-data spring-data-mongodb

5
推荐指数
1
解决办法
2327
查看次数

如何在Mongodb java驱动程序中按id字段编写多个组

在下面的查询中

{ $group : {
        _id :  { success:'$success', responseCode:'$responseCode', label:'$label'},
        max_timeStamp : { $timeStamp : 1 },
        count_responseCode : { $sum : 1 },
        avg_value : { $sum : "$value" },
        count_success : { $sum : 1 }
    }}
Run Code Online (Sandbox Code Playgroud)

如何 _id : { success:'$success', responseCode:'$responseCode', label:'$label'},在java mongodb驱动程序中翻译使用.

我试过了

BasicDBList list = new BasicDBList();
list.add(new BasicDBObject("success", "$success"));
list.add(new BasicDBObject("responseCode", "$responseCode"));
list.add(new BasicDBObject("label", "$label"));
AggregationOutput output = collection.aggregate(match, project, group); 
Run Code Online (Sandbox Code Playgroud)

多维数组

String [][] muitiGroupBy = {{"success", "$success"},{"responseCode", "$responseCode"},{"label", "$label"}}; …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-java aggregation-framework

5
推荐指数
2
解决办法
7156
查看次数

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

我正在尝试使用mongodb api编写一个java代码来创建这个mongodb查询:

{ "$or": [{"prd" : {"$in" : ["1234", "0987"]}} , {"rsin" : "3228742"}]}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止使用的代码:

QueryBuilder builder = new QueryBuilder();

if (builder == null) {
    builder = QueryBuilder.start();
 }

if (mongoKey.equals("prd")){

     ArrayList<String> vals = new ArrayList<String>();

     for (int i=0; i < prdList; i++){
         vals.add(prdList.get(i));
     }

     DBObject obj = new BasicDBObject (mongoKey, new BasicDBObject("$in", vals));
     builder.or(obj);

}else {
      builder.and(mongoKey).is(mongoValue);
}
Run Code Online (Sandbox Code Playgroud)

这当前打印出错误的语法:

{ "$or": [{"prd" : {"$in" : ["1234", "0987"]}}] , "rsin" : "3228742"}
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

java query-builder mongodb mongodb-java mongodb-query

5
推荐指数
1
解决办法
1万
查看次数

MongoDB java驱动如何判断副本集是否处于自动故障转移过程中?

我们的应用程序建立在 mongodb 副本集上。当副本集处于自动故障转移过程中时,我想捕获在时间范围内抛出的所有异常。我将使应用程序重试或等待故障转移完成。这样故障转移就不会影响用户。我在这里找到了描述 Java 驱动程序行为的文档: https //jira.mongodb.org/browse/DOCS-581

我编写了一个测试程序来查找所有可能的异常,它们都是 MongoException 但具有不同的消息:

  1. MongoException.Network:“对服务器 /10.11.0.121:27017 的读取操作在数据库测试中失败”
  2. MongoException:“找不到主人”
  3. MongoException:“不与主人交谈并重试已用完”
  4. MongoException:“[这里是副本集状态]中没有可用的副本集成员{“mode”:“primary”}”
  5. 也许更多...

我很困惑,不确定通过错误消息确定是否安全。此外,我不想捕获所有 MongoException。有什么建议吗?

谢谢

mongodb mongodb-java

5
推荐指数
1
解决办法
7379
查看次数

如何在 Spring Data MongoDB 中使用低级驱动程序 API

我正在使用 Spring Data MongoDB。但我不想将我的结果映射到域类。此外,我想在少数情况下访问低级 MongoAB API。但我希望 spring 管理连接池等。

我怎样才能得到一个实例com.mongodb.MongoClient来执行低级操作。这是我想要做的:

MongoClient mongoClient = new MongoClient();
DB local = mongoClient.getDB("local");
DBCollection oplog = local.getCollection("oplog.$main");
DBCursor lastCursor = oplog.find().sort(new BasicDBObject("$natural", -1)).limit(1);
Run Code Online (Sandbox Code Playgroud)

或者我只是想要一个 JSON 对象/DBCursor/DBObject。

spring mongodb-java spring-data spring-data-mongodb

5
推荐指数
1
解决办法
2182
查看次数

spring data mongo - 带有查询提示的 mongotemplate 计数

蒙戈文档指定您可以指定使用以下语法计数查询查询提示:

db.orders.find(
   { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }
).hint( { status: 1 } ).count()
Run Code Online (Sandbox Code Playgroud)

你能用 mongo 模板做到这一点吗?我有一个Query对象并且正在调用该withHint方法。然后我打电话mongoTemplate.count(query); 但是,我很确定它没有使用提示,尽管我并不乐观。

mongodb mongodb-java spring-data spring-data-mongodb

5
推荐指数
1
解决办法
2万
查看次数

com.mongodb.MongoTimeoutException 使用带有列表 ServerAddress 的 MongoClient 时

我正在尝试将副本数据库部署到具有不同端口的一台服务器上并与之连接。如果我只使用单个 ServerAddress 并像这样直接连接到主数据库,则一切正常:

mongoClient =new MongoClient(new ServerAddress("104.236.106.53", 27000));
morphia = new Morphia();
ds = morphia.createDatastore(mongoClient, "morphiaDB");
Run Code Online (Sandbox Code Playgroud)

一切正常。但是当我尝试这样使用时List<ServerAddress>

List<ServerAddress> lstServer = new ArrayList<ServerAddress>();
lstServer.add(new ServerAddress("104.236.106.53", 27000));
lstServer.add(new ServerAddress("104.236.106.53", 27002));
lstServer.add(new ServerAddress("104.236.106.53", 27001));
mongoClient = new MongoClient(lstServer);
morphia = new Morphia();
ds = morphia.createDatastore(mongoClient, "morphiaDB");
Run Code Online (Sandbox Code Playgroud)

最终会出现这个错误:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server …
Run Code Online (Sandbox Code Playgroud)

java timeout mongodb mongodb-java

5
推荐指数
1
解决办法
1万
查看次数

MongoDB的Spring数据中的非阻塞查询?

我想通过Spring Data使用MongoDB的Async Client API访问MongoDB来执行非阻塞数据库查询。

到目前为止,我只看到返回一个

  • java.util.concurrent.Future
  • java.util.concurrent.CompletableFuture
  • org.springframework.util.concurrent.ListenableFuture

和注释与查询方法@Async,例如

公共接口UserRepo扩展了Repository <User,Long> {

  @异步
  ListenableFuture <User> findByName(String name);

}

但是文档明确指出实际情况[...] query execution will occur in a task that has been submitted to a Spring TaskExecutor。因此,这并不是真正的非阻塞,而是使用无法很好扩展的线程池来解耦我的线程。

因此我的问题是:

如何使用MongoDB异步驱动程序的NIO功能以非阻塞模式执行查询?

到目前为止,我看到的唯一解决方法是摆脱掉Spring Data并使用Mongo Async Driver API自行实现数据库查询。但是希望我只是想念一些东西,并且那里有一个直截了当的答案。;)

java mongodb-java spring-data spring-data-mongodb

5
推荐指数
1
解决办法
1717
查看次数

如何使用Java上传mongodb中的json文件?

我正在尝试使用Java将一个大的JSON文件(newclicklogs.json)上传到mongodb.以下是我的JSON文件的样子:

{"preview":false,"result":{"search_term":"rania","request_time":"Sat Apr 01 12:47:04 -0400 2017","request_ip":"127.0.0.1","stats_type":"stats","upi":"355658761","unit":"DR","job_title":"Communications Officer","vpu":"INP","organization":"73","city":"Wash","country":"DC","title":"Tom","url":"www.demo.com","tab_name":"People-Tab","page_name":"PEOPLE","result_number":"5","page_num":"0","session_id":"df234f468cb3fe8be","total_results":"5","filter":"qterm=rina","_time":"2017-04-01T12:47:04.000-0400"}}
{"preview"......}
{"preview"......}
....
Run Code Online (Sandbox Code Playgroud)

这是我的Java代码:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.bson.Document;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class Main {

    public static void main(String[] args) throws IOException {

        String jsonString = FileUtils.readFileToString(new File("data/newclicklogs.json"), "UTF-8");

        Document doc = Document.parse(jsonString);
        List<Document> list = new ArrayList<>();
        list.add(doc);

        new MongoClient().getDatabase("test2").getCollection("collection1").insertMany(list);

    }
}
Run Code Online (Sandbox Code Playgroud)

当我查询我的mongodb集合时,只添加了一个文档.如何将文件中的所有文档添加到mongodb集合中.我是mongodb的新手.任何帮助表示赞赏.

java json mongodb mongodb-java

5
推荐指数
1
解决办法
3631
查看次数