从java驱动程序传递多个$ Unwind对象

时间:2013-08-02 17:52:23

标签: java mongodb mongo-java

mongo java驱动程序采用var args进行聚合方法,我有一个API,其中$unwind个对象是动态创建的,其数量不固定。我如何通过Mongo Java驱动程序聚合方法传递它,因为它需要单独传递每个对象。我尝试将所有$unwind对象传递给BasicDBList并传递,但它失败了。有人可以帮我解决一些问题吗?

示例:

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

,但这些展开可能会因为在运行时创建而有所不同。

1 个答案:

答案 0 :(得分: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);