Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java $unwind$push Mongo_Java_Mongodb_Mongodb Java - Fatal编程技术网

Java $unwind$push Mongo

Java $unwind$push Mongo,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,我有一份教育机构文件,看起来是这样的: {名称:…,地址:[…],课程:[{名称:…,持续时间:…,标记[…]} 标记有一个字符串数组 我正在尝试找到一个里面有一些标签的课程,比如:java、eclipse、struts等等 我的搜索方法如下所示: 公共基本列表坐标(列表标记){ 我想要的是按教育机构名称和地址展开的团体课程。如下图所示: {“id”:…,“名称”:“X25”,“地址”:{“状态”:“DF”,“locs”:[-15.806789,-47.912779]},“课程”:[{

我有一份教育机构文件,看起来是这样的:


{名称:…,地址:[…],课程:[{名称:…,持续时间:…,标记[…]}

标记有一个字符串数组

我正在尝试找到一个里面有一些标签的课程,比如:java、eclipse、struts等等

我的搜索方法如下所示:


公共基本列表坐标(列表标记){

我想要的是按教育机构名称和地址展开的团体课程。如下图所示:

{“id”:…,“名称”:“X25”,“地址”:{“状态”:“DF”,“locs”:[-15.806789,-47.912779]},“课程”:[{“名称”:“Microsoft Office Word 2010”,“持续时间”:22,“标记”:[…]},{“名称”:“Microsoft Office Excel 2010”,“持续时间”:18,“标记”:[…]},{“名称”:“Microsoft Office PowerPoint 2010”,“持续时间”:14,“标记”:[…]}]}

{ "_id" : ... , "name" : "ENG" , "addresses" : { "state" : "DF" , "locs" : [ -15.797209 , -47.883596]} , "courses" : [{ "name" : "MS Visio" , "duration" : 0 , "tags" : [...]}, { "name" : "Acrobat Professional" , "duration" : 12 , "tags" : [...]}, { "name" : "Framemaker" , "duration" : 0 , "tags" : [...]}]}

{ "_id" : ... , "name" : "ENG" , "addresses" : { "state" : "PR" , "locs" : [ -25.431803 , -49.279532]} , "courses" : [{ "name" : "MS Visio" , "duration" : 0 , "tags" : [...]}, { "name" : "Acrobat Professional" , "duration" : 12 , "tags" : [...]}, { "name" : "Framemaker" , "duration" : 0 , "tags" : [...]}]}

{ "_id" : ... , "name" : "ENG" , "addresses" : { "state" : "SP" , "locs" : [ -23.574942 , -46.71048]} , "courses" : [{ "name" : "MS Visio" , "duration" : 0 , "tags" : [...]}, { "name" : "Acrobat Professional" , "duration" : 12 , "tags" : [...]}, { "name" : "Framemaker" , "duration" : 0 , "tags" : [...]}]}

我读到了$push并尝试实现,但没有成功。我尝试在管道变量中添加BasicDBObject,并在cmdBody中追加命令


是否有人通过了类似的问题?

您可以在shell中使用$push操作符和$group pipeline操作符,如下所示:

db.t.aggregate([{$unwind:'$b'},{$unwind:'$c'},{$group:{_id:'$b',cs:{$push:'$c'}}}])
以JAVA为例,类似于:

pipeline.add(new BasicDBObject("$group", new BasicDBObject(new BasicDBObject("_id", groupParams)).append("courses", new BasicDBObject("$push", "$courses"))));

如果您很可能使用与您描述的格式相同的格式,那么您可以在末尾包含$project步骤,您可以使用该步骤重新格式化结果文档。

我只需将您的代码更改为
pipeline.add(new BasicDBObject($group),new BasicDBObject(new BasicDBObject('u id',groupParams)).append(“课程”,new BasicDBObject($push),“$courses”);
因为在BasicDBObject中没有一个构造函数的参数中有2个BasicDBObject。无论如何,它可以工作!Thx
db.t.aggregate([{$unwind:'$b'},{$unwind:'$c'},{$group:{_id:'$b',cs:{$push:'$c'}}}])
pipeline.add(new BasicDBObject("$group", new BasicDBObject(new BasicDBObject("_id", groupParams)).append("courses", new BasicDBObject("$push", "$courses"))));