在数组中聚合 mongodb 搜索
aggregate mongodb search in array
我的文档在 mongodb collection :
{
'id' : 'ID1',
'status' : 'ST1',
'logs' : [
{
'id' : 'ID2',
'status_old' : 'ST2',
'status_new' : 'ST3',
},
{
'id' : 'ID3',
'status_old' : 'ST3',
'status_new' : 'ST4',
}
]
},
{
'id' : 'ID4',
'status' : 'ST4',
'logs' : [
{
'id' : 'ID5',
'status_old' : 'ST2',
'status_new' : 'ST3',
}
]
}
我想通过以下两个过滤器传递文档
filter1 :
where
( status = 'ST1' OR
status_old = 'ST1' OR
status_new = 'ST1' )
那么得到的答案应该放在下面的过滤器(条件)中:
filter2 :
where
( status = 'ST2' OR
status_old = 'ST2' OR
status_new = 'ST2' )
答案陈述有两个条件,根据上面提供的文件,情况如下:
{
'id' : 'ID1',
'status' : 'ST1',
'logs' : [
{
'id' : 'ID2',
'status_old' : 'ST2',
'status_new' : 'ST3',
},
{
'id' : 'ID3',
'status_old' : 'ST3',
'status_new' : 'ST4',
}
]
},
因为您没有从 logs
数组中过滤掉任何元素,所以这看起来像是一个包含 2 $match
个阶段的聚合,其中包含 $or
db.collection.aggregate([
{
$match: {
$or: [
{
"status": "ST1"
},
{
"logs.status_old": "ST1"
},
{
"logs.status_new": "ST1"
}
]
}
},
{
$match: {
$or: [
{
"status": "ST2"
},
{
"logs.status_old": "ST2"
},
{
"logs.status_new": "ST2"
}
]
}
}
])
我的文档在 mongodb collection :
{
'id' : 'ID1',
'status' : 'ST1',
'logs' : [
{
'id' : 'ID2',
'status_old' : 'ST2',
'status_new' : 'ST3',
},
{
'id' : 'ID3',
'status_old' : 'ST3',
'status_new' : 'ST4',
}
]
},
{
'id' : 'ID4',
'status' : 'ST4',
'logs' : [
{
'id' : 'ID5',
'status_old' : 'ST2',
'status_new' : 'ST3',
}
]
}
我想通过以下两个过滤器传递文档
filter1 :
where
( status = 'ST1' OR
status_old = 'ST1' OR
status_new = 'ST1' )
那么得到的答案应该放在下面的过滤器(条件)中:
filter2 :
where
( status = 'ST2' OR
status_old = 'ST2' OR
status_new = 'ST2' )
答案陈述有两个条件,根据上面提供的文件,情况如下:
{
'id' : 'ID1',
'status' : 'ST1',
'logs' : [
{
'id' : 'ID2',
'status_old' : 'ST2',
'status_new' : 'ST3',
},
{
'id' : 'ID3',
'status_old' : 'ST3',
'status_new' : 'ST4',
}
]
},
因为您没有从 logs
数组中过滤掉任何元素,所以这看起来像是一个包含 2 $match
个阶段的聚合,其中包含 $or
db.collection.aggregate([
{
$match: {
$or: [
{
"status": "ST1"
},
{
"logs.status_old": "ST1"
},
{
"logs.status_new": "ST1"
}
]
}
},
{
$match: {
$or: [
{
"status": "ST2"
},
{
"logs.status_old": "ST2"
},
{
"logs.status_new": "ST2"
}
]
}
}
])