2013-08-02 29 views
0

mongo java驅動採用var args作爲聚合方法,我有一個API,其中$unwind對象被動態創建並且其編號不固定。我如何通過Mongo Java驅動程序聚合方法傳遞它,因爲它需要每個對象分別傳遞。我嘗試通過將所有$unwind對象放入BasicDBList並傳遞,但失敗。有人可以幫我解決一些問題嗎?

例如:

db.foo.aggregate({$unwind:items},{$unwind:item2}) 

,但這些放鬆,因爲它是在運行時創建越來越可能會發生變化。

+0

你可以在管道中單獨展開操作,一個接一個。但是你應該意識到這將是一場表演噩夢。 – Jayz

+0

性能開銷,不能這樣做 –

+0

你可以提供你的收藏是如何構造的細節?項目2是項目中的列表嗎?如果items和item2是集合中的單獨列表,那麼爲什麼您需要展開item和item2? – Jayz

回答

0

你不需要創建一個BasicDBList。這是它是如何工作的:

List<DBObject> unwindItems = new ArrayList<>(); 

if(<item2 is not null>){ //pseudo code 
    DBObject unwindItem1 = new BasicDBObject("$unwind", "$item1"); 
    unwindItems.add(unwindItem1); 
} 
if(<item2 is not null>){ //pseudo code 
    DBObject unwindItem2 = new BasicDBObject("$unwind", "$item2"); 
    unwindItems.add(unwindItem2); 
} 
//add any other dbObject in the list, it need not be an unwind operation, it could be match, project, group etc. 

DBObject command = new BasicDBObject("aggregate", "foo"); 
command.put("pipeline", dbObjects);