我有一个这样的集合:
{
side1:"apple",
side2:"peach",
a1:[
{_id:"apple", info:"test"},
{_id:"orange", info:"test"},
],
a2:[{_id:"banana", info:"test"},
{_id:"peach", info:"test"},
{_id:"apple", info:"test"}]
}
我正在寻找一种方法来仅列出a1
和a2
的子文档,其_id
值分别等于side1
和side2
。
我的意思是结果如下:
{
side1:"apple",
side2:"peach",
a1:{_id:"apple", info:"test"},
a2:{_id:"peach", info:"test"}
}
我搜索了很多内容,但我读过有关$filter
,$elemMatch
和$where
的内容,但我无法使用它们来解决我的问题。
答案 0 :(得分:2)
像这样的聚合管道
db.getCollection('yourColl').aggregate([
{
$project: {
_id: 0,
side1: 1,
side2: 2,
a1: {
$filter: {
input: "$a1",
as: "e",
cond: {
$eq: ["$$e._id", "$side1" ]
}
}
},
a2: {
$filter: {
input: "$a2",
as: "e",
cond: {
$eq: ["$$e._id", "$side2" ]
}
}
}
}
}
])
将为您的样本数据提供此输出
{
"side1" : "apple",
"side2" : "peach",
"a1" : [
{
"_id" : "apple",
"info" : "test"
}
],
"a2" : [
{
"_id" : "peach",
"info" : "test"
}
]
}