我有数据。
条件是:有效的home计数>0(有效的home意味着删除,不为真)
{
"_id": 998e58,
"home": [
{
"home_id": 433667,
"deleted": true
},
{
"home_id": 488742,
"deleted": ""
},
{
"home_id": 479331,
"deleted": true
},
{
"home_id": 481125,
},
]
},
{
"_id": 889g45,
"home": [
{
"home_id": 934456,
"deleted": true
},
{
"home_id": 978646,
"deleted": true
},
]
},
因为:
"_id":998e58,它是总归属计数= 4,无效home = 2,所以有效家庭计数是4-2 = 2,它大于0。-> match
"_id":889g45,它是总归属计数= 2,无效home = 2,所以有效家庭计数是2-2 = 0,它等于0。->不匹配
因此,如果数据匹配条件(意味着有效的主计数>0)。
如何使用mongodb来实现我的目标?
顺便说一句,我的设备数量可能有数万台,因此,如果使用解卷,群.
它可能会超过内存限制。奥兹。
我希望当我写命令:db.colletion_name.find(.),
我会得到数据:
{
"_id": 998e58,
"home": [
{
"home_id": 488742,
"deleted": ""
},
{
"home_id": 481125,
},
]
}
发布于 2021-09-03 11:47:29
首先,我们使用filter
查找所有已删除的元素不正确
然后addFields
将newHome数组的大小添加为数字。
在此之后,我们使用大小大于0的match
文档
然后project
来创建预期的输出
db.collection_name.aggregate([
{
$project:{
newHome:{
$filter :{
input:"$home",
as:"z",
cond:{$ne:["$$z.deleted",true]}
}
}
}
},
{
$addFields:{
numOfActive : {$size:"$newHome"}
}
},
{
$match:{numOfActive:{$gt:0}}
},
{project:{
_id:1,
home:"$newHome"
}}
])
https://stackoverflow.com/questions/69043042
复制相似问题