数组对象中的 $elemMatch 与 $in 和 $exist
$elemMatch in array object with $in and $exist
[{
_id: 6231cbafee8a3b08abb4ae67,
jadwal: {
_id: 6231cb8bbf823408b62f7280,
paket: [
paket : 6225ae9ac883840368c290cb
show_total_question:10
token:"TPKTGO"
},
{
paket : 616ee502a022be00116121c5
show_total_question:10
token:null
}],
},
paket: {
_id: 6225ae9ac883840368c290cb,
}
},
{
_id: 616ef62ca022be00116121df,
jadwal: {
_id: 616eee195e09f600183a267b,
paket: [
paket : 616ee3f32a30160019829bc1
show_total_question:10
},
{
paket : 616f12c7d2a514003018831f
show_total_question:10
token:"KQABIN"
}],
},
paket: {
_id: 616ee3f32a30160019829bc1,
}
},
]
首先,我从对 jadwal 和 paket 的聚合 $lookup 引用中获得了这两个样本数据。
我必须过滤数据,例如将 paket._id 与 jadwal.paket.paket 匹配,然后尝试检查令牌是否不存在或是否具有值 [null,""]。所以我希望的输出是
{
_id: 616ef62ca022be00116121df,
jadwal: {
_id: 616eee195e09f600183a267b,
paket: [
paket : 616ee3f32a30160019829bc1
show_total_question:10
},
{
paket : 616f12c7d2a514003018831f
show_total_question:10
token:"KQABIN"
}],
},
paket: {
_id: 616ee3f32a30160019829bc1,
}
}
因为在paket._id中有token.value在jadwal.paket.token中不存在。此数据的条件是 paket._id 总是在 jadwal.paket.paket 中有副本或相同的值
我在聚合的下方使用此代码
{'jadwal.paket':{'$elemMatch':{'paket':'$pakets._id','token':{$exists:false}
但似乎不起作用,或者我做错了?
请帮助我
我得到了答案
首先你必须放松 jadwal.paket
然后使用 $expr 作为过滤器
[{
_id: 6231cbafee8a3b08abb4ae67,
jadwal: {
_id: 6231cb8bbf823408b62f7280,
paket: [
paket : 6225ae9ac883840368c290cb
show_total_question:10
token:"TPKTGO"
},
{
paket : 616ee502a022be00116121c5
show_total_question:10
token:null
}],
},
paket: {
_id: 6225ae9ac883840368c290cb,
}
},
{
_id: 616ef62ca022be00116121df,
jadwal: {
_id: 616eee195e09f600183a267b,
paket: [
paket : 616ee3f32a30160019829bc1
show_total_question:10
},
{
paket : 616f12c7d2a514003018831f
show_total_question:10
token:"KQABIN"
}],
},
paket: {
_id: 616ee3f32a30160019829bc1,
}
},
]
首先,我从对 jadwal 和 paket 的聚合 $lookup 引用中获得了这两个样本数据。 我必须过滤数据,例如将 paket._id 与 jadwal.paket.paket 匹配,然后尝试检查令牌是否不存在或是否具有值 [null,""]。所以我希望的输出是
{
_id: 616ef62ca022be00116121df,
jadwal: {
_id: 616eee195e09f600183a267b,
paket: [
paket : 616ee3f32a30160019829bc1
show_total_question:10
},
{
paket : 616f12c7d2a514003018831f
show_total_question:10
token:"KQABIN"
}],
},
paket: {
_id: 616ee3f32a30160019829bc1,
}
}
因为在paket._id中有token.value在jadwal.paket.token中不存在。此数据的条件是 paket._id 总是在 jadwal.paket.paket 中有副本或相同的值 我在聚合的下方使用此代码
{'jadwal.paket':{'$elemMatch':{'paket':'$pakets._id','token':{$exists:false}
但似乎不起作用,或者我做错了? 请帮助我
我得到了答案 首先你必须放松 jadwal.paket 然后使用 $expr 作为过滤器