繁体   English   中英

如何访问 ZCCADCDEDB567ABAE643E15DCF0974E503Z 方案 object 数组的另一个数组中定义的数组元素?

[英]How to access array elements that are defined in another array of Mongoose scheme object Array?

这是 mongoose 中的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 \Desktop\grumpytext\routes\index.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); - 如果解决方案不起作用,我建议添加一些打印,特别是检查元素的数量是否符合预期或 object 中的属性是否正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM