我想用签名模拟一个方法:
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吗?
我们正在从本地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,设置......)?
find一段时间不活动后,我在调用(默认Java驱动程序)时出现此错误.我试图添加手动心跳(写入上限集合),但它没有帮助.我只在连接到compose上的实例时(即不在本地上下文中)得到问题.
MongoDB版本是3.2.8,最新的驱动程序(3.3),使用Java 8.
任何的想法 ?
这是我第一次尝试使用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)
错误:
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) ...
请注意,我使用127.0.0.1:27017进行连接,这适用于Mongo shell.另外,我在浏览器中使用了管理页面http://localhost:28017.
非常感谢任何和所有的想法!
我想将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)
我该如何修复它以便从我自己的数据库中检索用户?
我是使用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)
但这显然不起作用:(
我想使用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) 在阅读mongo站点上有关使用Java驱动程序的所有文档时,它引用了使用MongoClient()建立连接.它讨论了他们以前如何使用Mongo()但它已被弃用.但是,当我下载Mongo数据库链接到的最新(或任何)版本的java驱动程序(http://central.maven.org/maven2/org/mongodb/mongo-java-driver/)时,加载它进入我的项目库,我无法导入com.mongodb.MongoClient,因为它不存在!我已经尝试了他们链接到的驱动程序的六个不同版本.我实际上可以使用已弃用的Mongo()来使我的程序正常工作,但我不想在不推荐使用的功能上构建新软件.我在这里也找不到其他同样问题的人
以上是2.93版.任何人都可以帮我找到我做错了什么或错过了吗?我认为它是驱动程序版本,但这些是Mongo网站上的链接.我也不认为它的使用错误,因为我可以让其他一切工作得很好.
我正在切换到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)
知道怎么解决吗?谢谢!
我想删除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
mongodb-java ×10
java ×6
mongodb ×6
compose-db ×1
mockito ×1
mongo-java ×1
netbeans ×1
performance ×1
spring ×1
spring-data ×1
unit-testing ×1