如何访问Mongoose scheme对象array的另一个数组中定义的数组元素



这是猫鼬中的User模式:

var userSchema = new mongoose.Schema({
email: {
type: String,
unique: true,
required: true,
},
name: {
type: String,
required: true,
},
Addtasks: [
{
topic: String,
words: Number,
keywords: String,
website: String,
otherdetails: String,
exampleRadios: String,
deadline: Date,
Date: String,
fileName: String,
Bigpaths: [],
},
],
});
module.exports = mongoose.model('User', userSchema);

我想使用/访问Bigpaths数组,它在Addtasks数组中定义,在User中定义。数据已经存在于mongoDB中,我已通过UI页面插入。我正在尝试以下代码,但我在控制台中得到了这个错误:

data.Addtasks[Object.keys(data.Addtasks).length - 2].Bigpaths.forEach(
(element) => {
// ...
}
)

作为

TypeError: Cannot read property 'Bigpaths' of undefined
at Desktopgrumpytextroutesindex.js:99:71

代码:

const { files } = req;
User.findOne({ email: req.user.email }, function (error, data) {
if (error) {
console.log('Three');
} else if (data) {
if (Object.keys(data.Addtasks).length > 1) {
data.Addtasks[Object.keys(data.Addtasks).length - 2].Bigpaths.forEach(
(element) => {
files.forEach((currentElement) => {
if (element.name == currentElement.filename) {
files.pull(currentElement.filename);
}
});
}
);
}
}
});

如何解决这个错误,或者如何访问Bigpaths数组的所有元素,以便使用forEach循环对其进行迭代?

这里我不确定,但我认为您需要在操作Addtasks之前填充它:

const files = req.files;
User.findOne({email:req.user.email}).populate('Addtasks').exec((error, data) => {
if (error) {
console.log("Three");
}  
else 
{
if(data)
{
if(Object.keys(data.Addtasks).length > 1)
{
console.log("Addtasks count: " + Object.keys(data.Addtasks).length);
data.Addtasks[Object.keys(data.Addtasks).length - 2].Bigpaths.forEach(element => {
files.forEach(currentElement => {
if(element.name == currentElement.filename)
{
files.pull(currentElement.filename);
}
})
});
}
}
}
});

请注意日志console.log("Addtasks count: " + Object.keys(data.Addtasks).length);-如果解决方案不起作用,我建议添加一些打印,特别是检查元素数量是否如预期或对象内的属性是否正常。

最新更新