Node.js Mongoose:无法从没有数据字段的.chunk集合中获取文件文档

Node.js Mongoose:无法从没有数据字段的.chunk集合中获取文件文档,node.js,mongodb,mongoose,file-upload,gridfs,Node.js,Mongodb,Mongoose,File Upload,Gridfs,我正在尝试从文件中删除尚未完全上载到MongoDB数据库的块 将文件直接上载到MongoDB时,Mongoose、Multer&GridFSBucket包将媒体文件数据分成两个子集合,用于媒体集合:media.chunks和media.files 要手动删除存储在media.chunks集合中的文件块,您需要文件的ID,该ID存储在media.files和media.chunks集合中(文件元数据仅在文件已完全上载时才会显示在.files集合中)。但是,虽然未完全上载的文件显示在.chunks集

我正在尝试从文件中删除尚未完全上载到MongoDB数据库的块

将文件直接上载到MongoDB时,MongooseMulter&GridFSBucket包将媒体文件数据分成两个子集合,用于媒体集合:media.chunksmedia.files

要手动删除存储在media.chunks集合中的文件块,您需要文件的ID,该ID存储在media.files和media.chunks集合中(文件元数据仅在文件已完全上载时才会显示在.files集合中)。但是,虽然未完全上载的文件显示在.chunks集合中,但它们不显示在.files集合中!这意味着,虽然我可以从media.files集合中提取完全上载的文件文档,以便使用它们的ID删除它们,但对于不完整的文件,我不能这样做因此,为了删除不完整的文件,必须直接从.chunks集合获取文件文档

虽然我可以从.chunks集合中获取文件文档,但我不能仅从集合中选择文件ID。这会导致“错误:已达到最大响应大小”错误响应,因为文档数据太大。当您获取数据时,它也非常慢

下面是我的Node.js路径,用于从.chunks子集合中获取不起作用的所有文件ID

// Get the file IDs from the media.chunks collection.
router.get('/chunks', async function(req, res, next){
   
    var chunksQuery = await db.collection('media.chunks').find({},{data:0});    

    chunksQuery.toArray(function(error, docs) {
        console.log(docs)
        return res.json(docs);
    });
    
});
// Get the distinct file IDs that correspond to each upload.
db.collection('media.chunks').distinct('files_id', function(error, results){
    console.log('Distinct file ID results',results);
    return res.status(200).send();
});
我也尝试过使用.select(),但它不起作用:

// Does NOT work.
var chunksQuery = await db.collection('media.chunks').find().select('-data');
// Does NOT work either.
var chunksQuery = await db.collection('media.chunks').find().select('-media.chunks.data');

我相信我已经弄明白了。可以通过distinct()方法

// Get the file IDs from the media.chunks collection.
router.get('/chunks', async function(req, res, next){
   
    var chunksQuery = await db.collection('media.chunks').find({},{data:0});    

    chunksQuery.toArray(function(error, docs) {
        console.log(docs)
        return res.json(docs);
    });
    
});
// Get the distinct file IDs that correspond to each upload.
db.collection('media.chunks').distinct('files_id', function(error, results){
    console.log('Distinct file ID results',results);
    return res.status(200).send();
});

我相信我已经弄明白了。可以通过distinct()方法

// Get the file IDs from the media.chunks collection.
router.get('/chunks', async function(req, res, next){
   
    var chunksQuery = await db.collection('media.chunks').find({},{data:0});    

    chunksQuery.toArray(function(error, docs) {
        console.log(docs)
        return res.json(docs);
    });
    
});
// Get the distinct file IDs that correspond to each upload.
db.collection('media.chunks').distinct('files_id', function(error, results){
    console.log('Distinct file ID results',results);
    return res.status(200).send();
});