使用NodeJS中的gridfs按元数据删除文件

时间:2014-05-07 10:02:00

标签: javascript node.js mongodb gridfs

我正在尝试使用gridfs删除mongodb数据库中的文件。 我想删除所有带有metadata.relation = id的文件。 这是我在NodeJS中的方法:

function deleteFiles(){
    gfs.remove({'metadata.relation': req.body._id }, function(err){
      if (err) return false;
      return true;          
    })
}

错误是:

  

C:\用户\ Gaute \文件\ GitHub的\ WikiHelpSystem \ node_modules \猫鼬\ node_module   小号\ MongoDB的\ LIB \ MongoDB的\ GridFS的\ gridstore.js:1138
    if(names.constructor == Array){

     ^
     

TypeError:无法读取属性'构造函数'未定义的       在Function.GridStore.unlink(C:\ Users \ Gaute \ Documents \ GitHub \ WikiHelpSystem)   \ node_modules \猫鼬\ node_modules \ MongoDB的\ LIB \ MongoDB的\ GridFS的\ gridstore.js:1138   :11)

2 个答案:

答案 0 :(得分:6)

假设您正在使用gridfs-stream模块,那么当您使用对象调用gfs.remove时,它会期望该对象包含_id

您需要先使用MongoDb驱动程序获取ID。

// This should be your files metadata collection, fs.files is the default collection for it. 
var collection = db.collection('fs.files');     
collection.findOne({'metadata.relation': req.body._id }, { _id : 1 }, function (err, obj) {
    if (err) return cb(err); // don't forget to handle error/
    gfs.remove(obj, function(err){
      if (err) return false;
      return true;          
    })
});

答案 1 :(得分:0)

 gfs.files.remove({_id:_id} , function(err){
                                            if (err){
                                                 console.log("error");
                                            }else{
                                              console.log("old file removed")
                                            }           
                                   });