[英]Spring Data, MongoDB. How to get nested object (non-document) from document's array
Mongo 文档“历史”:
@Document(collection = "histories")
@Data
public class History {
@Id
private String id;
@Transient
private final String name = MAIN_FOLDER;
private String appleId;
private ArrayList<Item> historyItems = new ArrayList<>();
private ArrayList<Folder> historyFolders = new ArrayList<>();
}
文件夹型号:
@Data
public class Folder {
private String name;
private LocalDateTime date;
private ArrayList<Item> historyItem = new ArrayList<>();
}
使用条件查询:
public Folder findFolderByName(final String name) {
Query query = new Query();
query.addCriteria(Criteria.where("historyFolders.name").is(name));
return template.findOne(query, Folder.class);
}
我从这个查询中得到了 Null。 抱歉,我是这项技术的新手,我没有找到有关已记录数组的标准的信息。
您正在错误的集合中执行查询。 Folder
不是集合,而只是“历史”集合中的嵌套文档。
而且:您不能只返回带有“经典”查询执行的嵌套文档。 您必须在客户端(您的 Java 代码)过滤它,使用投影 $elemMatch过滤器并在客户端展开或为此使用聚合管道。 看看这个问题:如果您在查询/管道中需要这个,有很多解决方案。
您的查询看起来正确。 您只需更新查询执行即可使用History
实体而不是Folder
实体。
public History findFolderByName(final String name) {
Query query = new Query();
query.addCriteria(Criteria.where("historyFolders.name").is(name));
return template.findOne(query, History.class);
}
如果你经常使用这个查询并且你的集合中有很多文档:考虑在historyFolders.name
上创建一个索引
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.