我有一个像这个例子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
答案 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”);