您好,收藏如下:
clientPref
{
clntId: 1234,
clntType: "internal",
status: "PROCESSED",
prefs: [
{
name: "AAA",
value: "value1"
},
{
name: "BBB",
value: "value2"
},
{
name: "CCC",
value: "value3"
}
]
}
如果按prefs.name $in ("AAA", "CCC")
查找,则将得到所有子文档以及父文档。
然后,我尝试在@Query的fields参数中使用prefs.$: 1
,但随后它仅返回第一个匹配的子文档。
所需的输出
{
clntId: 1234,
clntType: "internal",
status: "PROCESSED",
prefs: [
{
name: "AAA",
value: "value1"
},
{
name: "CCC",
value: "value3"
}
]
}
有没有一种方法可以通过使用@Query
批注获取AAA和CCC子文档。如果不是,那么如何使用聚合呢?对于mongo来说还很新,因此无法找到一种获得期望结果的方法。
答案 0 :(得分:0)
您需要project
。
{
"prefs.$":1,
"clntType":1,
"status":1
}
查询:
db.collection.find({
"prefs.name": "AAA"
},
{
"prefs.$": 1,
"clntType": 1,
"status": 1
})
输出:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"clntType": "internal",
"prefs": [
{
"name": "AAA",
"value": "value1"
}
],
"status": "PROCESSED"
}
]
要获取所有子文档:
db.collection.aggregate([
{
"$unwind": "$prefs"
},
{
"$match": {
"prefs.name": {
"$in": [
"AAA",
"CCC"
]
}
}
}
])
如果要再次对所有数据进行分组,可以执行play
db.collection.aggregate([
{
"$unwind": "$prefs"
},
{
"$match": {
"prefs.name": {
"$in": [
"AAA",
"CCC"
]
}
}
},
{
"$group": {
"_id": "$_id",
"data": {
"$push": "$$ROOT"
}
}
}
])