我是mongodb的新手,想知道是否可以在集合或文档上创建自定义方法。像这样的东西:
getFullname = function(){
return this.name + " " + this.surname;
}
var user = db.users.findOne({name:"Bob"})
console.log(user.getFullname());
答案 0 :(得分:3)
对于node.js,您可以使用Mongoose支持在模型(即集合)模式上定义virtuals以及static和instance方法。
对于像你的全名例子这样的情况,虚拟很适合:
var userSchema = new Schema({
name: String,
surname: String
});
userSchema.virtual('fullname').get(function() {
return this.name + ' ' + this.surname;
});
那会让你做的事情如下:
var User = mongoose.model('User', userSchema);
User.findOne({name:"Bob"}, function(err, user) {
console.log(user.fullname);
});
答案 1 :(得分:2)
有两种方法,但你必须使用Mongoose。这不仅仅是一个mongoDB驱动程序,它还是一个类似ORM的框架。您可以使用虚拟或方法:
作为@JohnnyHK,使用:
UserSchema.virtual('fullName').get(function() {
return this.name + ' ' + this.surname;
});
这将创建一个虚拟字段,该字段可在程序中访问,但不保存到DB /虚拟字体也有一个方法集,将在设置值时调用
UserSchema.virtual('fullName').get(function() {
return this.name + ' ' + this.surname;
}).set(function(fullName) {
this.name = fullName.split(' ')[0];
this.surname = fullName.split(' ')[1];
});
所以当你这样做时:
Doe = new User();
Doe.fullName = "John Doe";
Doe.name
// Doe
Doe.surname
// John
它是最接近的东西:
UserSchema.methods.getFullname = function(){
return this.name + " " + this.surname;
}
JohnDoe.getfullName()
它与本机驱动程序最接近:
db.cursor.prototype.toArray = function(callback) {
this._apply('toArray', function(doc) {
doc.getFullName = ...
callback(doc);
});
};