Spring MongoDB在嵌套字段上展开

时间:2019-03-06 19:45:03

标签: mongodb aggregation-framework spring-mongodb spring-mongo

我正在尝试运行聚合查询,以尝试展开嵌套在键customFields下的数组。

结构就是这样

override func viewDidLoad() {
    ...

    // assign directly to instance property, don't use local variable
    wk = WKWebView(frame: .zero, configuration: config)
    view.addSubview(wk)
}

customField是字符串类型Object的Map。当我尝试放松 note.customFields.externalAttendees 时,出现错误 未找到对象类型的属性externalAttendees!遍历的路径:Activity.note.customFields。

另一方面,如果我在字段上展开,该字段是诸如List之类的具体对象的数组,其中User类将email和epp作为实例变量,那么我不会遇到任何异常。

有什么方法可以解开不是bean的一部分但可以在文档中使用的动态键。

我正在使用springMongoData数据库聚合。

1 个答案:

答案 0 :(得分:0)

类似的文档结构应具有完全相同的java表示形式。就我而言,要分组的externalAttendees是Map的一部分,而不是bean的实例变量。

我尝试了MongoTemplate的executeCommand(BasicDBObject.parse(stringJson))并解决了这个问题。

我的stringJson看起来像

{ "aggregate" : "__collection__" , "pipeline" : [ { "$match" : { "note.customFields.externalAttendees" : { "$exists" : true}}} , { "$match" : { "note.customFields.externalAttendees.name" : { "$in" : [ "x" , "y"]}}} , { "$sort" : { "createdDate" : -1}} , { "$unwind" : "$note.customFields.externalAttendees"} , { "$project" : { "id" : 1 , "emailId" : "$note.customFields.externalAttendees.name" , "aType" : "$note.type" , "subject" : "$note.subject"}} , { "$group" : { "_id" : "$emailId" , "type" : { "$first" : "$aType"} , "subject" : { "$first" : "$subject"}}}],"cursor": {"batchSize":10}}