【问题标题】:How to access array elements that are defined in another array of Mongoose scheme object Array?如何访问在 Mongoose 模式对象数组的另一个数组中定义的数组元素?
【发布时间】:2020-12-04 16:51:26
【问题描述】:

这是猫鼬中的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 循环对其进行迭代?

【问题讨论】:

    标签: javascript node.js arrays express mongoose


    【解决方案1】:

    我不确定这里,但我认为您需要在操作之前populate 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); - 如果解决方案不起作用,我建议添加一些打印,尤其是检查元素数量是否符合预期或对象内的属性是否正常。

    【讨论】:

    • Addtasks 的数量是多少?
    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 2021-02-07
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多