使用Spring Data Mongodb时,MongoDb查找给出的聚合结果为空

时间:2018-11-26 11:02:41

标签: java spring-boot spring-data-mongodb

以下是一个app_relation集合:

{
    "_id" : ObjectId("5bf518bb1e9f9d2f34a8299b"),
    "app_id" : "123456789",
    "dev_id" : "1",
    "user_id" : "1",
    "status" : "active",
    "created" : NumberLong(1542789294)
}

另一个集合是app:

{
    "_id" : ObjectId("5bd02abb1e9f9d2adc211138"),
    "app_id" : "123456789",
    "custom_app_name" : "Demo",
    "price" : 10,
    "created" : NumberLong(1540369083)
}

在mongodb中使用查找我想在AppRelation中嵌入App集合 对于同一我的mongodb查询是:

db.app_relation.aggregate([
      {
        $lookup: {
            "from": "app",
            "localField": "app_id",
            "foreignField": "app_id",
            "as": "data"
         }
      },
      {
        $match: {
            "data": {
                "$size": 1
                }
            }
        }
    ])

Spring Java中的等效代码是:

LookupOperation lookupOperation = LookupOperation.newLookup().from("app").localField("app_id")
                .foreignField("app_id").as("data");

        AggregationOperation match = Aggregation.match(Criteria.where("data").size(1));

        Aggregation aggregation = Aggregation.newAggregation(lookupOperation, match)
                .withOptions(Aggregation.newAggregationOptions().cursor(new BasicDBObject()).build());

        List<AppRelation> results = mongoTemplate.aggregate(aggregation, AppRelation.class, AppRelation.class)
                .getMappedResults();

执行上述代码时,它会提供一个空集合,而执行mongo db查询时,它将提供正确的结果。

在调试日志中生成的查询是:

{
  "aggregate": "app_relation",
  "pipeline": [
    {
      "$lookup": {
        "from": "app",
        "localField": "app_id",
        "foreignField": "app_id",
        "as": "data"
      }
    },
    {
      "$match": {
        "data": {
          "$size": 1
        }
      }
    }
  ],
  "cursor": {}
}

0 个答案:

没有答案