Mongoose _doc属性

时间:2014-05-01 13:20:03

标签: mongodb mongoose

假设我们在数据库中存储了一个任务,我们想删除它并检查它是否被删除。当我拥有在一个模块中访问数据库的所有代码时,一切正常。喜欢这个

task.spec.js模块

task.doFindByIdAndDelete( id )
 .then (function( deletedTask ){ 
   console.log( JSON.stringify(deletedTask.name, null, 2)) ;
 })
 .fail (function( err ){ 
  console.log( err ) ;
 })

task.js模块

var doFindByIdAndDelete = function(id){
 var deferred;
 deferred = Q.defer();

 TaskModel.findByIdAndRemove(id, function(err, modelDeleted){
  if(err){
    var error = "The model could not be deleted: ";
    deferred.reject(error + err);
  }
  deferred.resolve(modelDeleted);
 });

 return deferred.promise;
};

使用此代码,我可以毫无问题地打印'deletedTask'的属性'name'。但结果是'doFindByIdAndDelete'方法适用于数据库中的所有元素,我想创建一个包含所有公共方法的主函数类,然后'task'将是这个master类的一个实例。代码是:

task.spec.js模块

task.doFindByIdAndDelete( id )
 .then (function( deletedTask ){ 
   console.log( JSON.stringify(deletedTask.name, null, 2)) ;
 })
 .fail (function( err ){ 
   console.log( err ) ;
 })

MasterModel.js模块

var MasterModel = function(Model){
 this.Model = Model;
};

MasterModel.prototype.doFindByIdAndDelete = function(id){
  var deferred;
  deferred = Q.defer();

  Model.findByIdAndRemove(id, function(err, modelDeleted){
    if(err){
      var error = "The model could not be deleted: ";
      deferred.reject(error + err);
    }
    deferred.resolve(modelDeleted);
  });
  return deferred.promise;
};

task.js模块

var task = new ModelLogic(TaskModel);

在这个版本的代码中,当我从task.spec.js调用'doFindByIdAndDelete'时,我只能通过模型​​的_doc属性访问deletedTask的name属性,比如deletedTask._doc.name

这是一个错误吗?我的代码中有什么问题吗?我看过另外一些有类似问题的人发帖,比如

https://groups.google.com/forum/#!searchin/mongoose-orm/_doc/mongoose-orm/aq7rwxUnHTE/HoGXj6UTcu4J

但我找不到解决方案。 一些想法!!!

由于 托尼

1 个答案:

答案 0 :(得分:1)

解决方案只是添加" 这个"之前' Model.findByIdAndRemove(id,function(err,modelDeleted){... '正如我在评论中详述的那样。

this.Model.findByIdAndRemove(id, function(err, modelDeleted){…