这是我在Mongo的最后一个阶段:
{
name: 1,
items: "$activeItems",
tables: {
"$map": {
"input": "$activeTables",
"as": "table",
"in": {
"tableName": "$$table.tableName",
"tableId": "$$table.tableId"
字符串
我在Spring Data 中这样写:
final var projectStage = Aggregation.project()
.andInclude("name")
.andExpression("$activeItems").as("items")
.and(VariableOperators.Map.itemsOf("$activeTables").as("table")
.andApply(doc -> {
Document document = new Document();
document.append("tableName", "$$table.tableName");
document.append("tableId", "$$table.tableId");
return document;
}))
.as("tables");
final var result = mongoTemplate.aggregate(aggregation, Something.class, SomethingDto.class);
型
实体定义为
@Document(collection = "#{@mongoProperties.getSomethingCollectionName()}")
@TypeAlias("something")
public class Something{
@Id
private String id;
private String name;
private List<SomethingElseIdDto> somethingElse;
private List<Long> tables;
}
型
DTO是普通的POJO:
public class SomethingDto {
String name;
List<ItemDto> items;
List<TableDto> tables;
}
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
public class ItemDto {
Long itemId;
String itemName;
型
当运行Sping Boot 应用程序时,我从REST端点获取完整的数据,包括items
和tables
数组。但是集成测试发现tables
和items
两个数组都是空的。我在Compass中验证了它们是在Mongo中计算的,即使在测试集合中也是如此。
@SpringBootTest
@ActiveProfiles({"test", "integration-test"})
class DbServiceTest {
型
样本数据:
{
"name": "XYZ",
"items": [
{
"itemId": 123,
"itemName": "A",
},
"tables": [
{
"tableId": 456,
"tableName": "Q",
},
型
这太奇怪了相同的代码会根据Spring轮廓产生不同的结果。
1条答案
按热度按时间pengsaosao1#
好吧,问题是集合也必须动态计算:
字符串