2017-09-04 66 views
0

我使用貓鼬4.11.10,我宣佈了2個模型:用戶&任務。我的用戶模型是:使用填充表單完成

let UserSchema = mongoose.Schema({ 
    name: { 
    type: String, 
    required: true, 
    minlength: 1, 
    maxlength: 15 
    } 
}); 
let User = mongoose.model("UserModel", UserSchema); 

從用戶模型中的片段:

let TaskSchema = mongoose.Schema({ 
    userName: { 
    type: mongoose.Schema.ObjectId, 
    ref: "User", 
    required: false, 
    minlength: [1, "Invalid name"], 
    maxlength: [15, "Too big name"] 
    } 
}); 
let Task = mongoose.model("TaskModel", TaskSchema); 

從來就拿到形式,在這裏我輸入所有這些值:

<p>Add new task: </p> 
<form action="/api/tasks/" method="post"> 
    Name: 
    <input type="text" name="name"> 
    <br> 
    Definition: 
    <input type="text" name="definition"> 
    <br> 
    Status: 
    <input type="text" name="status"> 
    <br> 
    Responsible user: 
    <input type="text" name="userName"> 
    <br> 
    Deadline: 
    <input type="date" name="deadline" > 
    <br><br> 
    <input type="submit" value="SEND"> 
</form> 

在服務器端我有控制器:

api.post("/tasks/", (req, res) => { 
    let name = req.body.name; 
    let definition = req.body.definition; 
    let status = req.body.status; 
    let userName = req.body.userName; 
    let deadline = req.body.deadline; 
    if (userName.length < 1) { 
    Task.create({name: name}, {definition: definition}, {status: status}, {userName: "not delegated yet"}, {deadline: deadline}) 
     .then(() => { 
     console.log("Insertion successful"); 
     res.redirect("/api/tasks"); 
     }) 
     .catch(err => { 
     console.log("Cannot insert"); 
     throw err; 
     }) 
    } else { 
    Task.create({name: name}, {definition: definition}, {status: status}, {userName: userName}, {deadline: deadline}) 
     .then(() => Task.findOne({name: name}).populate("userName")) 
     .then(() => { 
     console.log("Insertion successful"); 
     res.redirect("/api/tasks"); 
     }) 
     .catch(err => { 
     console.log("Cannot insert"); 
     throw err; 
     }) 
    } 
}); 

就像你可以看到,我想鏈接2架構:我想要「委派」任務在指定的用戶,但現在填充()貓鼬方法不起作用:(我怎樣才能解決這個問題?

任何幫助將不勝感激!

回答

0

我發現類似的問題,這可能會幫助你https://stackoverflow.com/questions/14730676/linking-2-mongoose-schemas

+0

nope :(該問題也未解決 –

0

您定義的userName類型爲ObjectIdname類型是一個字符串。這是不匹配的,人口將無法工作。

更改類型爲String

let TaskSchema = mongoose.Schema({ 
    user: { 
     type: String, 
     ref: 'User', 
     required: false, 
     minlength: [1, "Invalid name"], 
     maxlength: [15, "Too big name"] 
    } 
}); 

我建議你重命名userNameuser添加更多的清晰度,當你查詢

Task.findOne(...).populate('user').exec(function (err, task) { 
    console.log(task.user.name); 
}); 

如果你想獲取特定用戶的所有任務,而無需添加tasks陣列到您的架構,你可以使用virtual population

UserSchema.virtual('tasks', { 
    ref: 'Task', // The model to use 
    localField: 'name', // Find task where `localField` 
    foreignField: 'user' // is equal to `foreignField` 
}); 

然後你就可以做

User.findOne(...).populate('tasks').exec(function (err, user) { 
    console.log(user.tasks); 
});