【问题标题】:MongoDB with Spring Boot and document containing similar fields带有 Spring Boot 的 MongoDB 和包含类似字段的文档
【发布时间】:2018-12-09 13:31:10
【问题描述】:

我正在尝试访问我的 MongoDB 数据库中的一个对象。

我的对象以这种格式存储在 db 中:

{
"_id" : ObjectId("some object id"), // mongodb gives this id
"my_id" : "Given id by myself",
"url" : "Some string data"
}

Myobj 类:

@Document(collection = "MYOBJ")
public class Myobj {

    @Id
    private ObjectId _id;

    private String my_id;

    private String url;
    // getters and setters and other methods
}

我想使用 my_id 字段获取此对象。在我的存储库中,我有这些:

public interface MyobjRepository extends MongoRepository<Myobj, String> {
    Myobj findBy_id(ObjectId _id);
    Myobj findByMy_id(String my_id);
}

但它无法构建,它给了我这个错误:

没有找到 Myobj 类型的属性!您指的是“url”吗?

我想它不能区分 my_id 和 _id。如何在不更改数据库中的对象的情况下解决此问题?

如果没有 findByMy_id 方法,它就可以工作。该方法会导致编译错误。

【问题讨论】:

  • 仅供参考,您没有使用任何与那里的 JPA API 有关的东西。请不要这样标记它

标签: mongodb spring-boot spring-data-mongodb


【解决方案1】:

问题是您在接口MyobjRepository 中将String 设置为该模板MongoRepository&lt;Myobj, String&gt; 的ID,并且您需要像MongoRepository&lt;Myobj, ObjectId&gt; 一样设置ObjectId,因为您说过在您的 Myobj 类中,您将使用 ObjectId _id@Id

我说的对吗?

【讨论】:

  • 实际上,我不确定要使用哪一个作为 ID。我不想使用 mongodb id (_id) 来访问数据库,因为我的 SQL 表中没有该引用。我的 SQL 表中有 my_id 的引用,所以我想使用 ID 作为该字段。
  • @kur30704 好的,但是如果你想搜索那个实体,你需要对象在存储库中具有相同的 Id 类型,就像在实体中一样。所以只有两种情况:1)实体:@IdObjectId 和存储库看起来像:MongoRepository&lt;Myobj, ObjectId&gt;,或 2)实体:@IdString 和存储库看起来像:MongoRepository&lt;Myobj, String&gt;
  • 我将使用 my_id 在 mongodb 中搜索对象。我的存储库应该是什么样的?
【解决方案2】:
@Document(collection = "MYOBJ")
public class Myobj {
    private ObjectId _id;

    @Id
    private String my_id;

    private String url;

}
public interface MyobjRepository extends MongoRepository<Myobj, String> {
    Myobj findBy_id(ObjectId _id);
    Myobj findByMy_id(String my_id);
}

【讨论】:

  • 感谢您的时间和精力,但是,我仍然有同样的错误。我禁用了“findBy_id”字段,再次出现同样的错误。如果我注释掉“findByMy_id”并添加“findByUrl”,它可以工作,但我想将 my_id 字段用于表格
猜你喜欢
  • 2018-07-10
  • 2019-03-07
  • 2023-03-29
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2020-12-24
相关资源
最近更新 更多