嵌入式文档中数组聚合的切片方法不适合我使用Spring mongo模板。
示例:
发票收款:
{
"reference_number": "aaa111",
"historical_data": {
"year": 2010,
"data": [
{
"item_name": "Apple",
"price": 50
},
{
"item_name": "Book",
"price": 200
}
]
}
}
使用mongoTemplate,我希望只获取切片中的历史数据。
对于需要切片直接出现在根下面的数组,我找到了使用聚合的解决方案。参考:Spring mongo仓库切片
对嵌入文档中的数组应用类似的查询,即使有数据,也会返回空列表。
我尝试的查询是:
TypedAggregation<Invoice> agg = newAggregation(Invoice.class,
match(where("reference_number").is(referenceNumber)),
project.andExpression("historicalData.data").slice(limit, offset));
AggregationResults<Invoice> result = mongoTemplate.aggregate(agg, Invoice.class, Invoice.class);
但这将返回一个空的数据列表。
我nvoice.java
@Data
@Document(collection = "invoice")
public class Invoice {
@Id
private String id;
@NotEmpty
@Indexed(unique = true)
@Field("reference_number")
private String referenceNumber = UUID.randomUUID().toString();
@Valid
@Field("historical_data")
private HistoricalData historicalData = new HistoricalData();
}
历史数据:
@Data
public class HistoricalData {
@NotEmpty
@Field("year")
private Intger year;
@Valid
@NotNull
@Field("data")
private List<InvoiceData> data = new LinkedList<>();
}
注意:我也尝试过:
TypedAggregation<Invoice> agg = newAggregation(Invoice.class,
match(where("reference_number").is(referenceNumber)),
project.andExpression("historical_data.data").slice(limit, offset));
AggregationResults<Invoice> result = mongoTemplate.aggregate(agg, Invoice.class, Invoice.class);
但这给了我一个PropertyPathexException。
提前谢谢!!
经过几周的努力,我想出了一个解决办法:
ProjectionOperation project = project().and("historicalRevisionData.data").slice(limit, offset).as("historical_revision_data.data")
.andInclude("id")
.and("referenceNumber").as("reference_number");
TypedAggregation<Invoice> agg = newAggregation(Invoice.class,
match(where("reference_number").is(referenceNumber)),
project);
AggregationResults<TaxInvoice> aggregate = mongoTemplate.aggregate(agg, Invoice.class, Invoice.class);
希望这也能帮助别人。
我有一个问题'XWPF文档'。程序的一部分获取docx文件,并将其中的所有内容复制到一个输出docx文件中。包括文字、表格、图片和公式。我在这方面有一个很好的结果,但是最近我有一个错误:一张图片没有复制到结果中。这是源代码,这是结果。结果你可以看到“3.1.6.2”部分的哪些图像被成功复制,但是不在“3.1.6.1”。 我是这样做的: 这里的关键是: 我从'运行'得到嵌入的图片。在坏的文件中,我有
您可以在Perl模块和脚本中嵌入Pod(Plain Old Text)文档。 以下是在Perl代码中使用嵌入式文档的规则 - 使用空行开始您的文档,在开头使用a = head1命令,然后使用= cut结束它 Perl将忽略您在代码中输入的Pod文本。 以下是在Perl代码中使用嵌入式文档的简单示例 - #!/usr/bin/perl print "Hello, World\n"; =head1 H
我有一个由“记事本”组成的meteor应用程序,每个记事本都包含一组“笔记”,可以在任何位置插入、删除或编辑行。该数组包含在一个对象中,该对象包含各种其他信息(例如名称、用户等)。主文档中的每个对象都将包含其中一个数组。例如: 是否有任何方法可以将“注释”作为其自己的集合传递给我的客户,以便客户可以直接编辑它,就像它没有嵌入一样?如果每次我想更新时都需要将完整的notes数组传递给服务器,我担心性
我用Mongoose定义了以下模式: 我尝试执行以下查询: 查询不响应,并且从不进入回调函数。这很奇怪,因为这种类型的查询(搜索两个字符串字段)适用于我定义的另一个模式,但不适用于这个模式。另一种模式更简单,不需要任何嵌入文档。 [更新] 我试过你的建议,但不行。我认为只有两个选择: 1.我发布的模式有问题。 多谢!
问题内容: 我浏览了猫鼬API,以及关于SO和google小组的许多问题,但仍然无法弄清更新嵌入式文档。 我正在尝试使用args的内容更新此特定的userListings对象。 以下是架构: 此发现也不起作用,这可能是第一个问题: 返回: 那应该等同于此mongo客户呼叫: 运行: 问题答案: 当您已有用户时,您可以执行以下操作: 如在这里找到:http : //mongoosejs.com/do
现在我想做的是将一个GeoStamps列表推送到Mongo中的GeoStamp数组,在那里我首先过滤跟踪器的ObjectId或它的iCAN。然后在文档中发现我需要按日过滤,所以我不会将GeoStamp列表添加到分布在多个日期的多个GeoStamp数组中。 我想可以用下面的方法来做: 我的查询(是的,我知道retrievedFields是不推荐的,我不想使用它,但这是我最接近工作的解决方案): 写入