我有一个这样的架构
const UserSchema = new Schema(
{
name: {
type: String,
required: true
},
payment:[{
description: {
type:String
},
amount:{
type:String
},
paid:{
type:Boolean,
default:false
}
}]
},
{ timestamps: true }
);
所以在这里,在付款子凭证中,我有多个条目。如何通过ID查找和更改此子文档的单个文档。是否存在任何功能User.payment.findbyID()
?请帮帮我。我想为一个文档更新 User.payment.paid == true 。我正在使用express.js
我做了一个愚蠢的尝试,而我尝试时却没有道理:
exports.ConfirmPayment= async(req,res)=>{
let payment
try{
payment= await User.findById(req.params.id).payment
ConfirmPayment = await payment.findById(req.params.paymentId)
ConfirmPayment.paid==true
await ConfirmPayment.save()
await payment.save()
res.status(200).json(ConfirmPayment)
}catch(err) {
console.log(err)
}
};
答案 0 :(得分:1)
我找到了解决方案。我尝试过滤查询,它起作用了。这是我的解决方案:
const paymentDB = user.payment.filter( (payment)=> {
return payment.amount === req.params.amount;
}).pop();
paymentDB.paid=true;
await user.save()