Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongodb自定义集合/文档方法_Node.js_Mongodb - Fatal编程技术网

Node.js mongodb自定义集合/文档方法

Node.js mongodb自定义集合/文档方法,node.js,mongodb,Node.js,Mongodb,我是mongodb新手,想知道是否可以在集合或文档上创建自定义方法。比如说: getFullname = function(){ return this.name + " " + this.surname; } var user = db.users.findOne({name:"Bob"}) console.log(user.getFullname()); 对于node.js,您可以使用它的支持来定义模型(即集合)模式以及方法 对于您的全名示例,virtuals非常适合: var u

我是mongodb新手,想知道是否可以在集合或文档上创建自定义方法。比如说:

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

var user = db.users.findOne({name:"Bob"})
console.log(user.getFullname());
对于node.js,您可以使用它的支持来定义模型(即集合)模式以及方法

对于您的全名示例,virtuals非常适合:

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);
});
对于node.js,您可以使用它的支持来定义模型(即集合)模式以及方法

对于您的全名示例,virtuals非常适合:

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);
});

有两种方法,但你必须使用猫鼬。这不仅仅是一个mongoDB驱动程序,而是一个类似ORM的框架。您可以使用虚拟或方法:

虚拟: 作为@johnyhk,使用:

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);
    });

};

有两种方法,但你必须使用猫鼬。这不仅仅是一个mongoDB驱动程序,而是一个类似ORM的框架。您可以使用虚拟或方法:

虚拟: 作为@johnyhk,使用:

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);
    });

};

由于mongoose集合是异步检索的
,因此您必须设置一个
承诺
,或者将
方法
调用嵌套在
findOne
函数中。由于mongoose集合是异步检索的
承诺
,您必须设置一个
承诺
,或者将
方法
调用嵌套在
findOne
函数中。如果我们不使用mongoose模块,而是使用默认模块驱动程序,该怎么办?如果我们不使用mongoose模块,而是使用默认模块驱动程序,该怎么办?