在spring数据聚合中使用嵌入式文档

时间:2014-09-19 16:58:25

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

我有一个像这个例子doc的MongoDB文档:

{
    "_id" : "A",
    "articleNumber" : "0123456",
    "shopDependentProperties" :
       { 
                    "shop" : "DE",
                    "foo" : "foo",
                    "bar" : "bar"
     }
}

并想要提取shopDependentProperties的属性,以获得以下结果

{
    "_id" : "A",
    "articleNumber" : "0123456",
    "foo" : "foo",
    "bar" : "bar"
}

在MongoDB Shell中我可以这样解决:

db.test.aggregate(
  [
    {
      $project:
        {       
          _id : "$_id",   
          articleNumber : "$articleNumber",
          foo:"$shopDependentProperties.foo",
          bar:"$shopDependentProperties.bar"
        }
    }
 ]
)

但是:在Spring Data MongoDB中,我无法提取嵌入的文档内容。 我尝试了很多组合,没有任何效果。例如:

ProjectionOperation projection = Aggregation.project("_id");
projection.andExpression("shopDependentProperties.foo").as("foo");
projection.andExpression("shopDependentProperties.bar").as("bar");
System.out.println(projection.toDBObject(Aggregation.DEFAULT_CONTEXT));

将忽略shopDependentProperties.shop的内容并打印出来

{ "$project" : { "_id" : 1}}

有什么建议吗?

THX

2 个答案:

答案 0 :(得分:0)

Haven未对此进行测试,但截至

http://docs.mongodb.org/manual/reference/operator/aggregation/project/

指定包含/排除的字段,如下所示:

db.test.aggregate(
[
  {
    $project:
      {       
        _id : "$_id",
        articleNumber : 1,
        "shopDependentProperties.foo": 1,
        "shopDependentProperties.bar": 1
      }
  }

]   )

他们向下解释了如何在投影结果中包含嵌入式文档。

答案 1 :(得分:0)

我知道在MongoDB中如何做到这一点,问题是在Spring Data中做同样的事情。

但它的工作原理是一样的,为什么我之前没试过呢?

<强>解决方案:

ProjectionOperation projection = Aggregation.project(         “品牌”,         “$ shopDependentProperties.foo”         “$ shopDependentProperties.bar”);