【问题标题】:Spring mongodb get ID of inserted item after SaveSpring mongodb在保存后获取插入项的ID
【发布时间】:2014-11-18 03:37:48
【问题描述】:

我正在使用 Spring MongoDb。

我使用insert 方法创建各种实体: http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html#insert-java.lang.Object-

但是,所有方法都返回 void。我需要返回插入文档的ObjectId

获得它的最佳方法是什么?

【问题讨论】:

  • If your object has an "Id' property, it will be set with the generated Id from MongoDB,有一个名为 Id 的属性。调用此方法后,您传递的 Object 将填充其 Id 属性。
  • 此外,您无需返回任何内容,因为该对象是可变的。
  • 谢谢。我需要在我的 REST API 的响应中返回它。我有一个公开的 API 来创建文档
  • 好吧,你总是可以做insert(someObject);return someObject.getId()
  • 要返回 id,您需要公开它们。 stackoverflow.com/questions/32480782/…

标签: mongodb spring-mongo


【解决方案1】:

这很有趣,我想我会分享。我刚刚在上面的 BatScream 评论的帮助下找到了解决方案:

您将创建一个对象并将其插入到您的 MongoDB:

    Animal animal = new Animal();
    animal.setName(name);
    animal.setCat(cat);

    mongoTemplate.insert(animal);

你的动物类看起来像这样,所有字段的 getter 和设置:

public class Animal {

    @Id
    @JsonProperty
    private String id;
    @JsonProperty
    private String name;
    @JsonProperty
    private String cat;

    public String getId() {
        return id;
    }
}

mongoTemplate.insert(animal);下完成插入后,您实际上可以调用方法animal.getId(),它会返回创建的ObjectId。

【讨论】:

  • 我尝试了mongoOperations.insert(thing),然后是thing.getId(),但它返回了null
【解决方案2】:

我对@AlanH 有同样的问题,animal.getId()null。然后我才意识到我的 id 字段已使用wither 方法设置为最终字段。所以getId() 当然是空的,因为 id 字段是不可变的,wither 方法返回一个带有 id 的新对象。

如果是这种情况:使用animal = template.insert(animal)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多