我正在尝试解析并将名称字段保存为mongoose User模型的单独名字和姓氏。我的模型架构如下所示:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
username: {
type: String,
required: true
},
firstName: {
type: String
},
lastName: {
type: String
},
role: {
type: String,
default: 'Guest',
enum: ['Organiser', 'Recipient', 'Contributor','Guest']
}
})
UserSchema.methods = {
saveParsedNames: function (nameString) {
function parseName(str) {
var nameArr = str.split(' ');
var firstName = nameArr[0];
var lastName = nameArr.slice(1,nameArr.length).join(' ').trim();
var parsedNames = [firstName, lastName];
return parsedNames;
}
var parsedNames = parseName(nameString);
this.firstName = parsedNames[0];
this.lastName = parsedNames[1];
return this.save()
}
}
module.exports = mongoose.model('User', UserSchema);
但是,现在,当我调用user.saveParsedNames("some name string")
时,不返回任何内容,也没有任何内容写入数据库。也不会在方法的错误块中抛出任何错误。它是“未定义的”。它闻起来像一些异步问题,但我看不出在哪里。有人可以点亮这里吗?
如何使用新的firstName和lastName属性更新User模型,并使用saveParsedNames()方法返回更新的对象?
更新
这是更新的方法,因为它现在不返回任何内容,但可以通过回调正确调用。我已经大量使用Neil Lunn的答案来获得类似的问题,以便在这里找到正确的方法:
UserSchema.methods = {
saveParsedNames: function (nameString, cb) {
var model = this.model(this.constructor.modelName, this.schema);
function parseName(str) {
var nameArr = str.split(' ');
var firstName = nameArr[0];
var lastName = nameArr.slice(1,nameArr.length).join(' ').trim();
var parsedNames = [firstName, lastName];
return parsedNames;
}
var parsedNames = parseName(nameString);
console.log(model);
return model.findByIdAndUpdate(this._id, {
firstName: parsedNames[0],
lastName:parsedNames[1]
},cb);
}
}
这就是它被称为:
createdUser.saveParsedNames(nameString, function (err, doc) {
console.log(doc);
});
感谢Neil Lunn在他的另一篇文章https://stackoverflow.com/a/22495224/52092
上的回答