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"))));