猫鼬:在存储字符串而不是objectId时获取未知的objectId

时间:2020-07-04 14:48:07

标签: mongodb mongoose

据我说,当我按下'ABC'而不是objectId时,它应该显示诸如

的错误

对对象ID的投射失败,其路径“喜欢”的值为“ ABC”

但是当我打印更新的数据时,我在喜欢数组中看到一些未知的objectId

我的问题是,那个未知的objectId(6a61736f6e20626f75726e65)是什么以及为什么生成它 自动


用户模型

  new Schema({
            name: { type: String,required:true},
    }, { usePushEach: true ,timestamp:true});

饲料模型

new Schema({
        user: { type: Types.ObjectId, ref: 'user', required: true },
        name: { type: String,default:null, trim: true },
        likes: [{ type : Types.ObjectId, ref: 'user',}],
}, { usePushEach: true ,timestamp:true});

在Feed架构中,喜欢引用用户架构
var data = await feed.findByIdAndUpdate(
                 postId, 
                { 
                 $push: { likes: 'ABC' }
                }
           );




        if(data){
         var data = await feed.findById(postId);
         console.log(data.likes);//["6a61736f6e20626f75726e65"]
        }
        OutPut:
        ["6a61736f6e20626f75726e65"]

1 个答案:

答案 0 :(得分:0)

由于您要在String中推送一个likes而不是ObjectId,所以会出现此错误。

您的架构清楚地表明,点赞是array of ObjectId

likes: [{ type : Types.ObjectId, ref: 'user'}],

因此您必须传递ObjectId而不是用户的name

您必须这样做:

// Whenever you are pushing value in `likes` `array`, 
// you need to get the `ObjectId` of the user who liked the feed.

let userId =  <userId_of_Ishwar>;
var data = await feed.findByIdAndUpdate(
     postId, 
     { 
         $push: { likes: userId }
     });