【问题标题】:how to insert embedded document using spring data mongodb mongotemplate如何使用spring data mongodb mongotemplate插入嵌入文档
【发布时间】:2014-09-08 06:10:02
【问题描述】:

我需要在现有事件文档中插入一个新轨道,下面是我的类结构

class Event
{ 
    String _id; 
    List<Track> tracks;
}

class Track
{
    String _id;
    String title;
}

我现有的文档是

{
  "_id":"1000",
  "event_name":"Some Name"
}

文档插入后的样子

{
  "_id":"1000",
  "event_name":"Some name",  
  "tracks":
   [
     {
        "title":"Test titile",
     }

  ]
}

如何使用 mongoTemplate spring data mongodb 将该轨道插入到我现有的文档中?

【问题讨论】:

    标签: spring mongodb spring-data-mongodb


    【解决方案1】:

    首先,您必须用@Document 注释Event 类:

    @Document(collection = "events")
    public class Event
    {
        // rest of code
    }
    

    添加事件的代码应如下所示:

    @Repository
    public class EventsDao {
    
        @Autowired
        MongoOperations template;
    
        public void addTrack(Track t) {
            Event e = template.findOne
                (new Query(Criteria.where("id").is("1000")), Event.class);
    
            if (e != null) {
                e.getTracks().add(t);
                template.save(e);
            }
        }
    }
    

    注意:您应该将 Event 的类 String _id; 更改为 String id; 以使此示例正常工作(或更改查询文字)。

    编辑更新曲目也相当容易。假设您要更改第一首曲目的标题:

    Event e = template.findOne(new Query(Criteria.where("_id").is("1000")), Event.class);
    if (e != null) {
        e.getTracks().get(0).setTitle("when i'm 64");
        template.save(e);
    }
    

    【讨论】:

    • 成功了!谢谢!您能告诉我添加后如何更新特定曲目吗?
    • 我不想在更新子文档时使用索引?有什么方法可以部分更新子文档吗?这将是很大的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2022-10-21
    • 2012-08-29
    相关资源
    最近更新 更多