【问题标题】:Cast to ObjectID failed for value转换为 ObjectID 的值失败
【发布时间】:2019-06-11 13:45:30
【问题描述】:

我在数组中的正文中收到名称(字符串),并且我想将每个数组转换为我的集合中的对象 ID。

我想将Strings引用到Schema,并将其替换为它的ObjectId,

这是我的架构:

var tagSchema = new Schema({

name: {
    type: String,
    required: true
  }
});

这是我在我的 api 中所做的:

var tags = req.body.tags;
tags.forEach((item, index) => {
    Tag.findOne({name: item}, (err,result)=> {
      tags[index] = result._id;
    });
 })

但是在我的控制台中,我收到了这个错误:

CastError: 路径“tags”处的值“['tag1','tag2']”转换为数组失败

这是我记录标签的时间:

['tag1', 'tag2']

似乎是什么问题?

提前致谢!

【问题讨论】:

  • 能否请console.log(tags) 告诉我们结果?
  • @Sridhar 问题已编辑。
  • 我认为你没有得到结果。 findOne 中的控制台错误和结果
  • @MonicaGarud 结果工作正常,错误提示: CastError: Cast to Array failed for value "[ 'tag1', 'tag2' ]" at path "tags"
  • @HamedJavaheri 标签是字符串数组,您将 ObjectId 推入其中。声明用于存储 objectId 的新数组

标签: javascript arrays node.js express


【解决方案1】:

tags 是一个字符串数组,您将 objectId 推入其中,这就是为什么它给出错误 CastError: Cast to Array failed for value "[ 'tag1', 'tag2' ]" at path "tags"

有多种解决方案,您可以根据您的要求实施。 请参阅下面的示例。

var tags = req.body.tags;
    var tagsObjectId=[];
    tags.forEach((item, index) => {
        Tag.findOne({name: item}, (err,result)=> {
          if(!err){
             tagsObjectId.push(result._id)
          }
        });
     })

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2020-08-25
    • 2013-03-24
    • 2021-06-27
    • 2021-09-05
    • 2021-03-09
    • 1970-01-01
    • 2017-10-24
    • 2020-04-18
    相关资源
    最近更新 更多