假设我有这种收集
{
"_id" :"A",
"title" : "TITLE1",
"brand" : [
{
"brand_id" : "B",
"varients" : [
{
"name" : "RED ",
"price" : 5.0
}
]
},
{
"brand_id" : "C",
"varients" : [
{
"name" : "GREEN",
"price" : 5.0
}
]
},
{
"brand_id" : "D",
"varients" : [
{
"name" : "Others",
"price" : 0.0
}
]
}
],
}
然后,我想选择一个并且只选择变体的嵌套数据。尝试了以下语句,但没有成功。
db.testing.findOne( {_id: "A", "brand.brand_id" : 'D'} )
预期输出
"varients" : [
{
"name" : "Others",
"price" : 0.0
}
]
使用findOne
,您无法在响应中获得文档的子集或嵌套内容,但是的,使用聚合,您可以以您想要的方式获得
查看此聚合管道:
[
{
'$match': {
'_id': 'A'
}
}, {
'$unwind': {
'path': '$brand'
}
}, {
'$match': {
'brand.brand_id': 'D'
}
}, {
'$project': {
'varients': '$brand.varients',
'_id': 0
}
}
]