这一直让我整天。我可以用gfs.exist()找到实际的_id文件,但是当我运行到下一行代码时,我每次都得到一个错误,并且猫鼬连接崩溃。这似乎很简单,但目前为止还没有任何工作。为什么不能用ObjectId删除gfs.files?
我的代码:{:裁判_ ID},函数(.....)无济于事
我一直在使用也试图
/**
* Created by foolishklown on 10/2/2016.
*/
var Grid = require('gridfs-stream'),
User = require('../../models/user'),
mongoose = require('mongoose');
module.exports = function(id, ref, type, res) {
console.log(ref.green);
Grid.mongo = mongoose.mongo;
var conn = mongoose.createConnection('mongodb://localhost/media');
conn.once('open', function() {
var gfs = Grid(conn.db);
gfs.exist({_id: ref}, function(err, found) {
if(err) {
console.error('error finding file'.red);
} else {
console.info('found file', found);
gfs.files.remove({_id: ref }, function(err) {
if(err) {
console.error('error removing that file');
process.exit(1);
} else {
console.info('removed file: ', found.green);
deleteFromUserDb(id, type, ref);
res.status(200).send({id: id, type: type, ref: ref});
}
});
}
});
});
conn.close();
function deleteFromUserDb(userId, fileType, refId) {
var userConn = mongoose.createConnection('mongodb://localhost/mean-auth', (error) => {
if(error) {
console.error('Error connecting to the mean-auth instance'.red);
process.exit(1);
} else {
User.findById(userId, (err, doc) => {
if(err) {
console.error('Error finding user with id: ', uid);
process.exit(1);
} else {
console.log('original doc: ', doc);
doc.removeMedia(fileType, refId);
doc.save();
console.log('new doc: ', doc);
}
})
}
});
}
};
我一直在使用gfs.files.remove(试gfs.files.remove({_ id:ref},{_id:1},function(....)
我也尝试过使用gfs.remove()而不使用gfs.files.remove。 ...
它一定是简单的,但它一直在击败我p整天... 谢谢
新编辑10/15 .......... 我现在试图只使用本地mongodb驱动程序。我可以用字符串找到文件,并将其转换为objectId。看起来操作完成没有问题,但是当我使用shell查看文件是否已被删除时,它仍然存在于fs.files和fs.chunks中。这一个正在杀死我!
deleteFile: function(userId, fileType, objId, res) {
var ObjectId = require('mongodb');
var client = mongodb.MongoClient;
var _id = new ObjectId(objId);
client.connect(mediaUri, (err, db) => {
assert.equal(null, err);
db.collection('fs.files').find({_id: _id}, (err, doc) => {
if(err) {
console.error('error finding that document in files collection'.red);
} else {
console.info('found the document: ', doc);
console.info('the document type is: ', typeof(doc));
}
});
db.collection('fs.chunks').find({_id: _id }, (err, doc) => {
if(err) {
console.error('error finding that document in the chunks collection'.red);
} else {
console.info('found the document(s): ', doc);
console.info('the document type is: ', typeof(doc));
}
});
db.collection('fs.files').deleteOne({_id: _id}, (err, doc) => {
console.log('document returned for deletion is: ', doc);
});
db.collection('fs.chunks').deleteOne({_id: _id}, (err, doc) => {
console.log('documents deleted: ', doc);
res.status(200).send({id: userId, type: fileType, ref: objId});
});
db.close();
})
}
和编辑:它得到正确的在那里我console.info线(“找到的文件”,实测值)挂了....... ... –
另外,我已经尝试使用var objectId = mongoose.Types.ObjectId(ref)将ref变量(作为字符串发送)转换为ObjectId; –