2016-05-09 75 views
0

我有一个集合中的项目MongoDB中如下相同的数据:吗啡聚合管道总是返回

{ 
"_id": "MY ID", 
"myCollection": [{ 
    "code": "Código 1", 
    "description": "Descripción entidad 1", 
}, 
{ 
    "code": "Código 2", 
    "description": "Descripción entidad 2", 
}, 
{ 
    "code": "Código 3", 
    "description": "Descripción entidad 3", 
}, 
... follows to 19 

如果我使用AggregationPipeline这样的:

AggregationPipeline pipeline = getDs().createAggregation(EntidadInfoEntity.class).unwind("myCollection") 
    .sort(new Sort("myCollection.descripcion", 1)).limit(resultadosPorPagina); 

Iterator<EntidadInfoEntity> resultado = pipeline.aggregate(EntidadInfoEntity.class); 
    while (resultado.hasNext()) { 
     EntidadInfoEntity entidadInfo = resultado.next(); 
    System.out.println(HerramientasJson.getInstance().convertirAJson(entidadInfo)); 
} 

我总是得到相同结果:

{"myCollection":[{"code":"Código 1","description":"Descripción entidad 1"} 
{"myCollection":[{"code":"Código 1","description":"Descripción entidad 1"} 
{"myCollection":[{"code":"Código 1","description":"Descripción entidad 1"} 

奇怪的是,如果我调试管道,我得到这个“阶段”值:

[{ "$unwind" : "$myCollection"}, { "$sort" : { "myCollection.description" : 1}}, { "$limit" : 25}] 

如果我尝试去执行它直属MongoDB的外壳:

db.myEntities.aggregate([{ "$unwind" : "$myCollection"}, { "$sort" : { "myCollection.description" : 1}}, { "$limit" : 25}]) 

我得到正确的结果:

{"myCollection":[{"code":"Código 1","description":"Descripción entidad 1"}]} 
{"myCollection":[{"code":"Código 2","description":"Descripción entidad 2"}]} 
{"myCollection":[{"code":"Código 3","description":"Descripción entidad 3"}]} 

任何想法,为什么会是什么?难道我做错了什么?

问候

注:一些数据被改写,试图更清晰地说明问题。输入错误可能会发生,但行为正如我所解释的那样。

+0

在Morphia内部调试时,我发现这是由于在MorphiaIterator中使用了内部缓存。它认为每次都是同一个对象,而不是建立一个新对象。我无法找到避免使用缓存或清除缓存的方法。这是一个错误? – Faliorn

回答