我需要您的帮助才能从和条件的集合中获取数据。假设我有一个包含以下文档的集合,我需要搜索名为brandId的值为14和38的子文档字段。
{
"_id" : ObjectId("5b3b206c4a25da19d05f41a2"),
"models" : [
{
"brandId" : "14",
"modelId" : "100",
"brandSlug" : "honda",
"modelSlug" : "hrv"
},
{
"brandId" : "38",
"modelId" : "894",
"brandSlug" : "toyota",
"modelSlug" : "fortuner"
},
{
"brandId" : "38",
"modelId" : "894",
"brandSlug" : "toyota",
"modelSlug" : "fortuner"
},
{
"brandId" : "37",
"modelId" : "773",
"brandSlug" : "suzuki",
"modelSlug" : "ertiga"
}
]
}
我想要那个brandId为14和38的子文档。
所需的输出=>
{
"_id" : ObjectId("5b3b206c4a25da19d05f41a2"),
"models" : [
{
"brandId" : "14",
"modelId" : "100",
"brandSlug" : "honda",
"modelSlug" : "hrv"
},
{
"brandId" : "38",
"modelId" : "1240",
"brandSlug" : "toyota",
"modelSlug" : "kijang-innova"
},
{
"brandId" : "38",
"modelId" : "894",
"brandSlug" : "toyota",
"modelSlug" : "fortuner"
}
]
}
答案 0 :(得分:1)
为什么这么复杂?放松,比赛和分组将完美地完成工作。
db.test1.aggregate([
{
$unwind: {
path : "$models"
}
},
{
$match: {
$or:[{"models.brandId":"14"},{"models.brandId":"38"}]
}
},
{
$group: {
_id:"$_id",
models:{$push:"$models"}
}
},
]
);
答案 1 :(得分:0)