2016-12-04 72 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