标签: mongodb-java

<T>的Mockito.any()

我想用签名模拟一个方法:

    public <T> T documentToPojo(Document mongoDoc, Class<T> clazz)
Run Code Online (Sandbox Code Playgroud)

我嘲笑它如下:

    Mockito.when(mongoUtil.documentToPojo(Mockito.any(Document.class), Mockito.any(WorkItemDTO.class)))
Run Code Online (Sandbox Code Playgroud)

但我得到的错误是:

documentToPojo(Document, Class<T>)类型中的方法MongoUtil不适用于参数(Document, WorkItemDTO)

Mockito有什么方法可以帮我模拟T吗?

java unit-testing mockito mongodb-java springmockito

23
推荐指数
2
解决办法
6万
查看次数

MongoDB Java API慢速阅读性能

我们正在从本地MongoDB中读取所有来自集合的文档,并且性能不是很高兴.

我们需要转储所有数据,不要担心为什么,只是相信它真的需要并且没有可能的解决方法.

我们有4mio文件看起来像:

{
    "_id":"4d094f58c96767d7a0099d49",
    "exchange":"NASDAQ",
    "stock_symbol":"AACC",
    "date":"2008-03-07",
    "open":8.4,
    "high":8.75,
    "low":8.08,
    "close":8.55,
    "volume":275800,
    "adj close":8.55
}
Run Code Online (Sandbox Code Playgroud)

我们现在使用这个简单的代码来阅读:

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("localhost");
MongoCollection<Document> collection = database.getCollection("test");

MutableInt count = new MutableInt();
long start = System.currentTimeMillis();
collection.find().forEach((Block<Document>) document -> count.increment() /* actually something more complicated */ );
long start = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

我们正在以16秒(250k行/秒)的速度阅读整个系列,这对于小型文档来说真的不是很令人印象深刻.请记住,我们要加载800十亿行.没有聚合,地图缩小或类似是可能的.

这是否与MongoDB一样快或者是否有其他方法可以更快地加载文档(其他技术,移动Linux,更多RAM,设置......)?

java performance mongodb mongodb-java mongo-java

23
推荐指数
2
解决办法
1964
查看次数

MongoSocketReadException:过早地到达流的末尾(在一段时间不活动之后)

find一段时间不活动后,我在调用(默认Java驱动程序)时出现此错误.我试图添加手动心跳(写入上限集合),但它没有帮助.我只在连接到compose上的实例时(即不在本地上下文中)得到问题.

MongoDB版本是3.2.8,最新的驱动程序(3.3),使用Java 8.

任何的想法 ?

java compose-db mongodb mongodb-java

21
推荐指数
4
解决办法
3万
查看次数

MongoDb连接被拒绝了

这是我第一次尝试使用MongoDB.我有Mongo跑:

ps -ef | grep [m]ongo
mongodb  11023  1  0 Jun24 ? 00:00:03 /usr/lib/mongodb/mongod --config /etc/mongodb.conf
Run Code Online (Sandbox Code Playgroud)

这个错误就是做的结果

Datastore.save( stuff );  // (pseudo code)
Run Code Online (Sandbox Code Playgroud)

错误:

Jun 27, 2011 3:20:29 PM com.mongodb.DBTCPConnector fetchMaxBsonObjectSize
WARNING: Exception determining maxBSON size using0
java.io.IOException: couldn't connect to [russ-elite-book/127.0.1.1:27017] bc:java.net.ConnectException: Connection refused
    at com.mongodb.DBPort._open(DBPort.java:206)
    at com.mongodb.DBPort.go(DBPort.java:94)
    at com.mongodb.DBPort.go(DBPort.java:75)
    at com.mongodb.DBPort.findOne(DBPort.java:129)
    at com.mongodb.DBPort.runCommand(DBPort.java:138)
    ...
Run Code Online (Sandbox Code Playgroud)

请注意,我使用127.0.0.1:27017进行连接,这适用于Mongo shell.另外,我在浏览器中使用了管理页面http://localhost:28017.

非常感谢任何和所有的想法!

mongodb mongodb-java

20
推荐指数
4
解决办法
6万
查看次数

使用Spring Security + Spring数据+ MongoDB进行身份验证

我想将Spring安全性与MongoDB一起使用(使用Spring数据)并从我自己的数据库中检索用户以获得Spring安全性.但是,我不能这样做,因为我的userservice类型似乎不受支持.

这是我的UserService类:

public class UserService {
    private ApplicationContext applicationContext;
    private MongoOperations mongoOperations;

    public UserService() {
        applicationContext = new AnnotationConfigApplicationContext(MongoConfig.class);
        mongoOperations = (MongoOperations) applicationContext.getBean("mongoTemplate");
    }

    public User find(String username) {
        return mongoOperations.findOne(Query.query(Criteria.where("username").is(username)), User.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的SecurityConfig类:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    UserService userService;

    @Autowired
    public void configAuthBuilder(AuthenticationManagerBuilder builder) throws Exception {
        builder.userDetailsService(userService); //THIS DOES NOT WORK
        builder.inMemoryAuthentication().withUser("username").password("password").roles("USER");
    }

}
Run Code Online (Sandbox Code Playgroud)

我评论的这句话说:

The inferred type UserService is not a valid substitute for the bounded parameter <T extends UserDetailsService>.
Run Code Online (Sandbox Code Playgroud)

我该如何修复它以便从我自己的数据库中检索用户?

java spring spring-security mongodb mongodb-java

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

在Spring Repository接口中使用sort()和limit()进行查询

我是使用MongoDB的Spring Data的新手,我希望在MongoRepository扩展接口中有一个自动生成的查询方法,需要过滤,排序和限制.

查询如下所示:

// 'created' is the field I need to sort against

find({state:'ACTIVE'}).sort({created:-1}).limit(1)
Run Code Online (Sandbox Code Playgroud)

存储库界面如下所示:

public interface JobRepository extends MongoRepository<Job, String> {
    @Query("{ state: 'ACTIVE', userId: ?0 }")
    List<Job> findActiveByUserId(String userId);

    // The next line is the problem, it wont work since
    // it's not in the format @Query expects
    @Query("find({state:'ACTIVE'}).sort({created:-1}).limit(1)")
    Job findOneActiveOldest();

    ...
}
Run Code Online (Sandbox Code Playgroud)

我知道可以将一个Sort参数添加到查询方法中以便进行排序,但问题是将结果限制为仅一个对象.这可以在不必编写自定义JobRepositoryImpl的情况下完成吗?

谢谢

编辑:

我正在寻找的例子:

@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();
Run Code Online (Sandbox Code Playgroud)

要么

@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();
Run Code Online (Sandbox Code Playgroud)

但这显然不起作用:(

mongodb-java spring-data

17
推荐指数
2
解决办法
3万
查看次数

如何使用Java将数组添加到MongoDB文档?

我想使用java驱动程序在mongoDB中创建以下文档架构

{
  "_id": {
    "$oid": "513e9820c5d0d8b93228d7e8"
  },
  "suitename": "testsuite_name",
  "testname": "testcase_name",
  "milestones": [
    {
      "milestone_id": "359",
      "testplans": [
        {
          "pland_id": "965",
          "runs": [
            6985,
            5896
          ]
        },
        {
          "plan_id": "984",
          "runs": [
            9856,
            3684
          ]
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我有以下代码

BasicDBObject testObject = new BasicDBObject();
BasicDBObject milestoneObject = new BasicDBObject();

testObject.put("suitename", testsuite);
testObject.put("testname", testcase);
testObject.put("milestones", new BasicDBObject("milestone_id", "2333"));
locations.insert(testObject);
Run Code Online (Sandbox Code Playgroud)

但这并不像阵列那样产生里程碑.如何将里程碑添加为数组?我目前使用我的代码得到这个

{
  "_id": {
    "$oid": "513f93dac5d0e2439d34308e"
  },
  "suitename": "test_deployment_disable_client.TestDeploymentDisableClient",
  "testname": "test_deployment_disable_client",
  "milestones": {
    "milestone_id": "2333"
  }
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-java

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

在Java驱动程序中找不到MongoClient

在阅读mongo站点上有关使用Java驱动程序的所有文档时,它引用了使用MongoClient()建立连接.它讨论了他们以前如何使用Mongo()但它已被弃用.但是,当我下载Mongo数据库链接到的最新(或任何)版本的java驱动程序(http://central.maven.org/maven2/org/mongodb/mongo-java-driver/)时,加载它进入我的项目库,我无法导入com.mongodb.MongoClient,因为它不存在!我已经尝试了他们链接到的驱动程序的六个不同版本.我实际上可以使用已弃用的Mongo()来使我的程序正常工作,但我不想在不推荐使用的功能上构建新软件.我在这里也找不到其他同样问题的人下面的netbeans中显示的库的图像,在这种情况下为2.93

以上是2.93版.任何人都可以帮我找到我做错了什么或错过了吗?我认为它是驱动程序版本,但这些是Mongo网站上的链接.我也不认为它的使用错误,因为我可以让其他一切工作得很好.

java netbeans mongodb-java

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

使用Java 3驱动程序进行MongoDB更新

我正在切换到MongoDB Java驱动程序版本3.我无法弄清楚如何执行Document的更新.例如,我想更改用户的"年龄":

MongoDatabase db = mongoClient.getDatabase("exampledb");
MongoCollection<org.bson.Document> coll = db.getCollection("collusers");

Document doc1 = new Document("name", "frank").append("age", 55) .append("phone", "123-456-789");
Document doc2 = new Document("name", "frank").append("age", 33) .append("phone", "123-456-789");
coll.updateOne(doc1, doc2); 
Run Code Online (Sandbox Code Playgroud)

输出是:

java.lang.IllegalArgumentException: Invalid BSON field name name
Run Code Online (Sandbox Code Playgroud)

知道怎么解决吗?谢谢!

mongodb-java

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

如何删除java中mongodb集合中的所有文档

我想删除java中集合中的所有文档.这是我的代码:

MongoClient client = new MongoClient("10.0.2.113" , 27017);
        MongoDatabase db = client.getDatabase("maindb");
        db.getCollection("mainCollection").deleteMany(new Document());
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

我正在使用MongoDB 3.0.2

java mongodb mongodb-java

16
推荐指数
3
解决办法
2万
查看次数