【问题标题】:Java: Mongo fails to assert the right number of documents insertedJava:Mongo 未能断言插入的文档数量正确
【发布时间】:2012-06-19 04:22:19
【问题描述】:

我有以下测试

    @Test
    public void testPutDocuments() throws Exception {
        final DBObject document01 = new DBObject();
        document01.put("uniqueId", "001");
        document01.put("rv", "values");
        document01.put("pv", "values");

        final DBObject document02 = new DBObject();
        document02.put("uniqueId", "002");
        document02.put("rv", "values");
        document02.put("pv", "values");

        final DBObject document03 = new DBObject();
        document03.put("uniqueId", "003");
        document03.put("rv", "values");
        document03.put("pv", "values");

        final List<DBObject> documents = new ArrayList<DBObject>();
        documents.add(document01);
        documents.add(document02);
        documents.add(document03);

        mongoRule.getMongoService().putDocuments(documents);
        assertEquals(3, mongoRule.getDatabase().getCollection("test").getCount());
    }

其中mongoRule是连接数据库的规则,提供MongoService(写给mongo客户端的包装器)

MongoService相关方法

public void putDocument(@Nonnull final DBObject document) {
    LOGGER.info("inserting document - " + document.get("uniqueId"));
    mongo.getDB(database).getCollectionFromFull(getCollectionName(document)).insert(document);
}

public void putDocuments(@Nonnull final List<DBObject> documents) {
    for (final DBObject document : documents) {
        putDocument(document);
    }
}

当我运行它时,我得到了

java.lang.AssertionError: 
Expected :3
Actual   :1  

现在,如果我这样做

  mongoRule.getMongoService().putDocuments(documents);
  Thread.sleep(1000); 
  assertEquals(3, mongoRule.getDatabase().getCollection("contract").getCount());

我没有发现错误。

问题:
a.) 为什么让线程休眠一秒钟有助于获得正确的数字。这不是与并发相关的问题吗?如果两个线程试图将相同的文档放在文档必须是唯一的地方怎么办。
b.) 我该如何解决这个问题?

谢谢

【问题讨论】:

标签: java mongodb mongo-java


【解决方案1】:
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2022-01-03
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多