在匹配条件下从 mongodb 获取数据
get data from mongodb in match condition
我有数据。
条件是:有效家庭数 > 0(有效家庭意味着删除不正确)
{
"_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,无效家 = 2,所以有效家数是 4-2 = 2,它大于 0。 --> match
“_id”:889g45,它的总家数 = 2,无效家数 = 2,因此有效家数为 2-2 = 0,等于 0。 --> 不匹配
所以,如果数据符合条件(意味着有效家庭计数>0)。
如何使用 mongodb 条件来实现我的目标?
顺便说一句,我的设备可能有几万个,所以如果使用unwind,groupby...
它可能会超过内存限制。 ORZ.
我希望当我写命令时:db.colletion_name.find(...),
我将获取数据:
{
"_id": 998e58,
"home": [
{
"home_id": 488742,
"deleted": ""
},
{
"home_id": 481125,
},
]
}
首先我们使用filter
查找所有删除的元素不正确
然后我们addFields
将 newHome 数组的大小添加为数字
然后我们 match
文档大小 > 0
然后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"
}}
])
我有数据。
条件是:有效家庭数 > 0(有效家庭意味着删除不正确)
{
"_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,无效家 = 2,所以有效家数是 4-2 = 2,它大于 0。 --> match
“_id”:889g45,它的总家数 = 2,无效家数 = 2,因此有效家数为 2-2 = 0,等于 0。 --> 不匹配
所以,如果数据符合条件(意味着有效家庭计数>0)。
如何使用 mongodb 条件来实现我的目标?
顺便说一句,我的设备可能有几万个,所以如果使用unwind,groupby...
它可能会超过内存限制。 ORZ.
我希望当我写命令时:db.colletion_name.find(...),
我将获取数据:
{
"_id": 998e58,
"home": [
{
"home_id": 488742,
"deleted": ""
},
{
"home_id": 481125,
},
]
}
首先我们使用filter
查找所有删除的元素不正确
然后我们addFields
将 newHome 数组的大小添加为数字
然后我们 match
文档大小 > 0
然后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"
}}
])