MongoDB 查找特定文档?

MongoDB finding a speciffic document?

我正在努力寻找特定文档,因为大多数教程都已过时,而且我的 MongoDB 版本(最新)没有 BasicDBObject。

我正在使用 BSON,这是我的尝试,

    public Document getPlayer(UUID uuid) {
    Document toFind = new Document("id", uuid);
    MongoCursor<Document> c = players.find(toFind).iterator();
    while (c.hasNext()) {
        if (toFind.equals(c)) {
            return c;
        }
    }

    return null;
}

我完全知道这是错误的,但我只是不知道如何找到有关 MongoDB 的任何信息。

看看http://mongodb.github.io/mongo-java-driver/3.9/javadoc/index.html?overview-summary.html

对于普通查询,使用 Filters 实用程序 class

players.find(Filters.eq("id", id))

评论后编辑:当我在这个答案上找到一个绿色的钩子时,我猜你已经解决了它,但是:确保你在你的项目中包含了正确的驱动程序版本。具体来说,您需要 3.x 系列的驱动程序才能使用更现代的界面。

当前maven依赖为:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.9.1</version>
</dependency>

Filters完全合格其实就是com.mongodb.client.model.Filters.

您可以使用 Spring 数据 MongoDB 和 maven 轻松查询 mongoDb,如下所示。

首先需要添加maven依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

因为它允许映射 mongoDB 文档和一个 java POJO,所以创建一个模型 class.

import org.springframework.data.annotation.Id;
public class Player{
    @Id
    private String id;
    private String playerName;

    //getters and setters
}

假设您的 mongoDb 文件如下

{
    "_id": "123456789",
    "playerName":"name1"
}

然后通过扩展 MongoRepository class

创建一个接口 class 作为存储库
public interface PlayerRepository extends MongoRepository<Player, String> {

    Player findById(String id);

    Player findByPlayerName(String playerName);

    @Query("{name:{$regex: ?0,$options:'i'}}")
    List<Player> findPlayerByNameRegex(String name);
}

您终于可以使用它们实现或自动装配(推荐)存储库 class。只需实现一个名为 findByFiledName 的方法,剩下的将做 Spring MongoDb 依赖。此外,您可以将 @Query 注释用于自定义查询和过滤器。 您也可以参考 Spring Documentation