【发布时间】:2021-08-16 14:46:44
【问题描述】:
我有一个像这样的猫鼬模式:
const popupDetails = new mongoose.Schema({
title:{
type:String,
default:""
},
message:{
type:String,
default:""
},
redirectPath:{
type:String,
default:null
},
creditsScored:{
type:Number,
default:0
},
isSeen:{
type:Boolean,
default:false
},
_id:false
})
const popupSchema = new mongoose.Schema({
user_id:{
type:mongoose.Schema.Types.ObjectId,
ref:"User",
index:1
},
popupsArray: [popupDetails]
})
现在我想根据 isSeen 是否为假来过滤 popupsArray。我想将 popups 数组中的所有弹出窗口发送到 isSeen 为 false 的客户端,并且随时将 isSeen 更改为 true。我怎样才能做到这一点?
这就是我现在过滤它的方式:
try {
const reqPopups = await popupSchema.aggregate([
{
'$match': {
'user_id': mongoose.Types.ObjectId(`${user_id}`)
}
}, {
'$unwind': {
'path': '$popupsArray',
'preserveNullAndEmptyArrays': true
}
}, {
'$match': {
'popupsArray.isSeen': false
}
}
])
res.json({user_id,reqPopups})
} catch (error) {
console.log(error);
res.json({error})
}
有什么建议吗?
【问题讨论】:
-
我面临的主要问题是将isSeen改为true。
-
请展示您创建过滤器的尝试,我们可以从那里更正它。最好用你想要的最终对象输出。如果可能,请附上示例文档。
标签: node.js mongodb express mongoose mern