2016-05-09 77 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

回答