MongoDb Lookup дает пустой результат агрегирования при использовании Spring Data Mongodb - PullRequest
0 голосов
/ 26 ноября 2018

Ниже приведена коллекция 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)
}

Использование Lookup в mongodb Я хочу встроить коллекцию приложений в AppRelation Для того жеЗапрос 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": {}
}
...