mongodb自定义集合/文档方法

时间:2014-08-22 14:48:59

标签: node.js mongodb

我是mongodb的新手,想知道是否可以在集合或文档上创建自定义方法。像这样的东西:

getFullname = function(){
   return this.name + " " + this.surname;
}

var user = db.users.findOne({name:"Bob"})
console.log(user.getFullname());

2 个答案:

答案 0 :(得分:3)

对于node.js,您可以使用Mongoose支持在模型(即集合)模式上定义virtuals以及staticinstance方法。

对于像你的全名例子这样的情况,虚拟很适合:

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的框架。您可以使用虚拟或方法:

VIRTUALS:

作为@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()

使用MongoJS

它与本机驱动程序最接近:

db.cursor.prototype.toArray = function(callback) {
    this._apply('toArray', function(doc) {
       doc.getFullName = ...
       callback(doc);
    });

};