是否需要锁定 mongodb 中的每个文档?

Is it required to lock every document in mongodb?

我是 MongoDB 的新手。我正在经历这个 link:

https://docs.mongodb.org/getting-started/java/query/

我的问题是:

的目的是什么
iterable.forEach(new Block<Document>() {

    @Override
    public void apply(final Document document) {
        System.out.println(document);
    }

});

谁能解释一下什么是 Blockapply

我只想读取 mongodb 中的数据。我不想更改其中的数据。

代码只是读取 Restaurant 集合中的所有文档并在控制台上打印出每个文档。

在迭代期间操作 Documents 是可选的方式。

Block 是一个 Functional Interface(Java 接口),它允许您将 Document 修改为自定义对象(add/edit/remove 数据,初始化您的自定义对象等等...)

因此,Block 只有 1 个名为 apply 的方法,您需要在其中实现 Document 操作。在迭代过程中,forEach 自动调用 apply 方法。

您可以阅读有关功能接口的更多信息:https://dzone.com/articles/introduction-functional-1

编辑:

为了更优雅地使用forEach,你可以这样做:

  1. 创建新的 class 实现 Block<Document>。因此,对于 forEach 方法,您可以传递 class 实例 (iterable.forEach(new DocumentImpl())).

    public class DocumentImpl implements Block<Document> {
    
        public void apply(Document arg0) {
            //Do stuff here
        }
    
    }
    
  2. 不推荐!已弃用。不要使用 MongoDatabase db,而是使用 DB db 它与 DBObject 接口一起工作的地方。因此,一旦您使用 find 进行查询,您将获得 DBCursor。您可以通过 .next() 迭代 DBCursor 并获得 DBObject 个文档。

  3. 使用 Spring-Data,它更具可读性,并且可以在 MongoDB 和 POJO 之间自动映射您的对象。 http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/repository/MongoRepository.html