聚合查找在春天不起作用

时间:2018-02-23 16:45:46

标签: java spring mongodb aggregation-framework

我在spring中运行以下聚合查找查询,但它似乎没有输出与我在mongo shell中运行的结果相同的结果。我猜mongo shell知道来自:“testModel”集合存在,但Spring如何知道“testModel”存在,因为我们只在Aggregation.lookup(“testModel”)中传递字符串。我可以运行所有其他阶段,例如匹配或项目..

// code running in Mongo Shell
db.demoModel.aggregate([{
    $lookup:
      {
        from: "testModel",
        localField: "_id",
        foreignField: "makeId",
        as: "cool"
      }
 }]
)

// code from spring
    public List<DemoModel> getSomeAutos() throws Exception {

    LookupOperation lookupStage = Aggregation.lookup(
           "testModel",
           "_id",
           "makeId",
            "cool"

    );

    Aggregation aggregation = Aggregation.newAggregation(lookupStage);

    List<DemoModel> demomode =  mongoTemplate.aggregate(aggregation, "demoModel", DemoModel.class).getMappedResults();

    return demomode;

}

// DemoModel.class
public class DemoModel {
@Id
private String id;
private String value;
private String label;



public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

public String getLabel() {
    return label;
}

public void setLabel(String label) {
    this.label = label;
}
}

//Mongo demoModel Collection
{ 
 "_id" : ObjectId("5a8ee0d815dc17aa32f90f4b"), 
 "value" : "Mitsubishi", 
 "label" : "Mitsubishi"
}
{ 
 "_id" : ObjectId("5a8ee0d815dc17aa32f90f4c"), 
 "value" : "BMW", 
 "label" : "BMW"
}

// Mongo testModel Collection

{ 
"_id" : ObjectId("5a8ee393b80c346266f25aba"), 
"make" : "Mitsubishi", 
"label" : "3000GT", 
"value" : "3000GT",
"makeId" : ObjectId("5a8ee0d815dc17aa32f90f4b")
}
 { 
  "_id" : ObjectId("5a8ee393b80c346266f25af8"), 
  "make" : "BMW", 
  "label" : "Alpina A2", 
  "value" : "Alpina A2",  
  "makeId" : ObjectId("5a8ee0d815dc17aa32f90f4c")
}

//我正在回复

[
  {
    "id": "5a8ee0d815dc17aa32f90f4b",
    "value": "Mitsubishi",
    "label": "Mitsubishi"
  },
  {
    "id": "5a8ee0d815dc17aa32f90f4c",
    "value": "BMW",
    "label": "BMW"
 }
]

//此格式的预期回复

{ 
  "_id" : ObjectId("5a8ee0d815dc17aa32f90f4b"), 
  "value" : "Mitsubishi", 
  "label" : "Mitsubishi", 
  "cool" : [
    {
        "_id" : ObjectId("5a8ee393b80c346266f25aba"), 
        "make" : "Mitsubishi", 
        "label" : "3000GT", 
        "value" : "3000GT", 
        "makeId" : ObjectId("5a8ee0d815dc17aa32f90f4b")
    }]
 }

0 个答案:

没有答案