2016-12-04 142 views
0

我知道这个问题已经问了很多,但我真的不知道。猫鼬在填充时抛出错误

我设置了两个猫鼬模式,用户模式和问题的模式:

用户模式:

const mongoose = require('mongoose'); 
const passportLocalMongoose = require('passport-local-mongoose'); 

var UserSchema = mongoose.Schema({ 
    uid: String, 
    name: String, 
    username: String, 
    insertion: String, 
    surname: String, 
    email: String, 
    password: String, 
    birthday: String, 
    gender: String, 
    avatar: String, 
    school: String 
}); 

UserSchema.plugin(passportLocalMongoose); 
module.exports = mongoose.model("User", UserSchema); 

和问题的模式:

const mongoose = require('mongoose'); 

var vragenSchema = new mongoose.Schema({ 
question: String, 
lesson: String, 
answered: Boolean, 
author: { 
    id: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: "User" 
    }, 
    username: String 
}, 
date: { 
    type: Date, 
    default: Date.now 
}, 
description: String, 
answersCount: Number, 
user_votes: Number, 
answers: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: "Answers" 
}] 
}); 

module.exports = mongoose.model("Vragen", vragenSchema); 

当我尝试使用此代码填充文件:

app.get("/vragen/:id", isLoggedIn, function(req, res) { 
    Vragen.findById(req.params.id).populate("author").exec(function(err,gevondenVraag) { 
    if (err) { 
     console.log(err); 
    } else { 
     res.render("vragen/show.ejs", {vragen: gevondenVraag}) 
    } 
    }); 
}); 

它给了我一个投错误:

{ CastError: Cast to ObjectId failed for value "{ id: '5840a19db36cd81788505018', username: 'TygoD' }" at path "_id" 
    at MongooseError.CastError (F:\PWS\node_modules\mongoose\lib\error\cast.js:26:11) 
    at ObjectId.cast (F:\PWS\node_modules\mongoose\lib\schema\objectid.js:147:13) 
    at ObjectId.castForQuery (F:\PWS\node_modules\mongoose\lib\schema\objectid.js:187:15) 
    at F:\PWS\node_modules\mongoose\lib\schematype.js:868:18 
    at Array.map (native) 

    at ObjectId.handleArray (F:\PWS\node_modules\mongoose\lib\schematype.js:867:14) 
    at ObjectId.castForQuery (F:\PWS\node_modules\mongoose\lib\schema\objectid.js:185:20) 
    at cast (F:\PWS\node_modules\mongoose\lib\cast.js:213:39) 
    at Query.cast (F:\PWS\node_modules\mongoose\lib\query.js:2741:10) 
    at Query.find (F:\PWS\node_modules\mongoose\lib\query.js:1144:10) 
    at F:\PWS\node_modules\mongoose\lib\query.js:2300:21 
    at new Promise.ES6 (F:\PWS\node_modules\mongoose\lib\promise.js:45:3) 
    at Query.exec (F:\PWS\node_modules\mongoose\lib\query.js:2294:17) 
    at populate (F:\PWS\node_modules\mongoose\lib\model.js:2709:11) 
    at _populate (F:\PWS\node_modules\mongoose\lib\model.js:2615:5) 
    at Function.Model.populate (F:\PWS\node_modules\mongoose\lib\model.js:2575:5) 
message: 'Cast to ObjectId failed for value "{ id: \'5840a19db36cd81788505018\', username: \'TygoD\' }" at path "_id"', 
name: 'CastError', 
kind: 'ObjectId', 
value: { id: '5840a19db36cd81788505018', username: 'TygoD' }, 
path: '_id', 
reason: undefined } 

我尝试了几种解决方案,但这些并没有帮助。这是一个错误还是我做错了什么?

我是新的node.js和mongodb,所以如果有任何改进,我可以让请告诉我。

回答

1

它应该是author.id在您的populate而不是author,您可以尝试如下。

app.get("/vragen/:id", isLoggedIn, function(req, res) { 
    Vragen.findById(req.params.id).populate("author.id").exec(function(err,gevondenVraag) { 
    if (err) { 
     console.log(err); 
    } else { 
     res.render("vragen/show.ejs", {vragen: gevondenVraag}) 
    } 
    }); 
}); 
+0

谢谢!我怎么会这么愚蠢。 – Xz3s

0

id类没有OBJECTID!蒙戈存储正常DBREF这样的:

id: DBRef("User", ObjectId("5840a19db36cd81788505018")) 

因此,无论您需要更改从的ObjectId id类型或者你需要修复您的服务器上插入和数据!

+0

也改变了这一点,谢谢 – Xz3s