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);
}
我从这个查询中得到空值。很抱歉,我是新技术,我没有找到有关文档化数组的标准的信息。
1条答案
按热度按时间zbq4xfa01#
您在错误的集合中执行查询。
Folder
不是集合,而只是“histories”集合中的嵌套文档。而且:不能只返回执行“classic”查询的嵌套文档。您必须在客户端(java代码)对其进行过滤,使用$elemmatch filter并在客户端展开,或者为此使用聚合管道。看看这个问题:如果在查询/管道中需要这个,有很多解决方案。
您的查询看起来是正确的。只需更新查询执行即可使用
History
实体而不是Folder
实体。如果您经常使用此查询并且集合中有大量文档:请考虑在上创建索引
historyFolders.name