我正在使用Node.js,Mongoose,MongoDb,express开发应用程序。
我有两个模式,一个用于学生,另一个用于片段。我正在使用人口模型population model。我可以创建一个用户,并创建一个片段并将其链接到用户。但我无法链接并保存用户集合中的代码段。
如何链接和保存用户,以便它可以引用他的代码段?
用户和代码段架构
var userSchema = Schema({
name: { type: String, required: true, unique: true },
password: { type: String, required: true },
snippet: [{ type: Schema.Types.ObjectId, ref: 'Snippet' }]
})
var snippetSchema = Schema({
user: {type: Schema.Types.ObjectId, ref: 'User'},
title: String,
body: String,
createdAt: {
type: Date,
require: true,
default: Date.now
}
})
这是我通常在用户注册时保存用户的方式。
var username = request.body.name
var password = request.body.password
var newUser = new User({
name: username,
password: password
})
newUser.save().then(function () {
console.log('success')
response.redirect('/')
})
这就是我保存片段的方法,我将它添加到用户.save()函数中,以便它保存片段ref,但它给了我name.save()不是函数错误。
var name = request.session.name.name
name.save().then(function () {
// Using a promise in this case
var newSnippet = new Snippet({
user: name._id,
title: title,
body: snippet
})
newSnippet.save().then(function () {
// Successful
console.log('success')
response.redirect('/')
})
}).catch(function (error) {
console.log(error.message)
response.redirect('/')
})
答案 0 :(得分:1)
name.save()
不是函数,因为在这种情况下name只是一个字符串,而不是 Mongoose 对象。
一种方法是创建您的用户,然后检索它并添加一个代码段:
var name = request.session.name.name
User.find({ name: name }).then(function (user) {
// Here you get your user by name
var newSnippet = new Snippet({
user: user._id, // And here you can pass user _id
title: 'your title',
body: 'your snippet'
})
newSnippet.save()
})