Nodejs表示删除数据对象,如果它在数组中



我想删除数组中对象id可用的数据。但它是嵌套数组,我这样做

const getLessonByUserid = async (req, res) => {
const userid = req.params.userid
try {
const temp = [];
const getdata = await UserLessons.find().
populate(['quizid',
{
path: 'quizid',
populate:
{
path: 'userid',
populate:
{
path: 'userid',
},
},
}
]);
let dataget = getdata;
for (let i = 0; i < dataget.length; i++) {
// console.log(dataget[i].quizid.length)
for (let j = 0; j < dataget[i].quizid.length; j++) {
console.log('debug')
console.log(dataget[i].quizid[j])
for (let k = 0; k < dataget[i].quizid[j].userid.length; k++) {
console.log(dataget[i].quizid[j].userid[k].userid);
if (dataget[i].quizid[j].userid[k].userid._id == req.params.id) {
console.log('match')
// dataget[i].quizid[j].userid[k].userid = [];
dataget[i].quizid[j].remove();
}
}
}
}
return res.status(200).json({
success: true,
message: "question found succesfully",
data: dataget
})
} catch (err) {
if (err.name === 'ValidationError') {
console.error(Object.values(err.errors).map(val => val.message))
return res.status(400).json({ success: false, message: Object.values(err.errors).map(val => val.message)[0] })
}
return res.status(400).json({ success: false, message: err.message })
}
}

但问题是dataget[i].quizid[j].remove();,我需要隐藏/删除是从数据库中删除数据:D我只需要隐藏这个数组或删除数组。如果有任何可能性从查询中执行,那将是伟大的。

有两个模型

一个是教训

const mongoose = require('mongoose');
const lessonschema = new mongoose.Schema({
//quiz id
quizid: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "quiz"
}
],
text: {
type: String,
default: ''
},
image: {
type: String,
default: ''
},
audio: [
{
type: String,
default: ''
}
],
video: [{
type: String,
default: ''
}],

createdOn: {
type: Date,
default: Date.now
}
})
exports.UserLessons = mongoose.model('lessons', lessonschema);
exports.lessonschema = lessonschema;

其他是测验

const mongoose = require('mongoose');
const quizschema = new mongoose.Schema({

userid: [
{
userid: {
type: mongoose.Schema.Types.ObjectId,
ref: "users"
},
answer: {
type: String
}
}
],
question:
{
type: String,
// required:true
},
questionType: {
type: Number,
default: 0
//0: text,1:moodbase,
},

quizRating: [{
type: mongoose.Schema.Types.ObjectId,
ref: "answerrating"
}],
voice: {
type: String,
default: ""
},

});
exports.Quiz = mongoose.model('quiz', quizschema)
exports.quizschema = quizschema

我不知道这是如何从数据库中删除。它工作正常,但从数据库中删除不期望。

我建议你在mongodb中使用ArrayFilters功能

let updatedObject = {};
Object.assign(updatedObject, {
'UserLessons.$[i].Quiz.$[j].quizRating.$[k].anyFieldYouWant': 
True, // For example is boolean
});
this.yourModel.findOneAndUpdate(
{
_id: id,
},
updatedObject,
{
arrayFilters: [
{
'i._id': firstNestedObjectId,
},
{
'j._id': secondNestedObjectId,
},
{
'k._id': thirdNestedObjectId,
},
],
new: true,
},
);

这个例子是更新字段,要删除你可以使用findOneAndDelete我希望这对你有帮助。

相关内容

最新更新