Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 如何为GridFS集合创建mongoose模型?_Node.js_Mongodb_Mongoose_Gridfs - Fatal编程技术网

Node.js 如何为GridFS集合创建mongoose模型?

Node.js 如何为GridFS集合创建mongoose模型?,node.js,mongodb,mongoose,gridfs,Node.js,Mongodb,Mongoose,Gridfs,所以我试图为GridFS集合创建mongoose模型,但没有成功 let bucket; (async () => { try { await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true }); const { db } = mongoose.connection; bucket = new mongoose.mongo.GridFSBucket(

所以我试图为GridFS集合创建mongoose模型,但没有成功

let bucket;
(async () => {
    try {
        await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true });
        const { db } = mongoose.connection;
        bucket = new mongoose.mongo.GridFSBucket(db, { bucketName: 'tracks' });
    }
    catch(err) {
        console.log(err);
    }
})();
以下是我的课程模式和模式:

const courseSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    tracks: [{
        type: mongoose.Types.ObjectId,
        ref: 'tracks.files'
    }],
});

const Course = mongoose.model('Course', courseSchema);
const trackSchema = new mongoose.Schema({
    length: { type: Number },
    chunkSize: { type: Number },
    uploadDate: { type: Date },
    filename: { type: String, trim: true, searchable: true },
    md5: { type: String, trim: true, searchable: true },
}, { collection: 'tracks.files', id: false });

const Track = mongoose.model('Track', trackSchema);
这是我的轨迹模式和模型:

const courseSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    tracks: [{
        type: mongoose.Types.ObjectId,
        ref: 'tracks.files'
    }],
});

const Course = mongoose.model('Course', courseSchema);
const trackSchema = new mongoose.Schema({
    length: { type: Number },
    chunkSize: { type: Number },
    uploadDate: { type: Date },
    filename: { type: String, trim: true, searchable: true },
    md5: { type: String, trim: true, searchable: true },
}, { collection: 'tracks.files', id: false });

const Track = mongoose.model('Track', trackSchema);
我得到了这个错误:

MongooseError [MissingSchemaError]: Schema hasn't been registered for model "tracks.files".
当我运行此命令时:

Course.findById('5d5ea99e54fb1b0a389db64a').populate('tracks').exec()
    .then(test => console.log(test))
    .catch(err => console.log(err));

关于这些东西的文档绝对没有,我快疯了。我是第一个在Mongodb中保存16MB以上文件的人吗?为什么实施起来如此困难?有人能告诉我正确的方向吗。

响应延迟,但请尝试将
ref:'tracks.files'
替换为
ref:'trackSchema'

ref
字段在
populate('trackSchema')
中引用,并且必须是对另一个架构的引用。如果您想了解更多关于在Mongoose中填充字段和引用的信息,请查看

我也不建议为实现GridFS创建任何形式的模式,我会让Mongo来处理这个问题,因为如果实现不正确,可能会导致文件损坏或文档丢失/过时

至于缺少GridFS的官方文档,特别是带有Mongoose的GridFS,我使用了Mongo的原生GridFsBucket类(据我所知,目前还没有官方维护的Mongoose GridFS API),我自己尝试使用的最好的文档是。这里有一个教程

要在Mongoose中使用Mongo的原生GridFSBucket,只需从其
connection
属性中获取其
Mongo
属性和Mongoose的连接实例

const mongoose = require(mongoose);
var gridFSBucket = new mongoose.mongo.GridFSBucket(mongoose.connection.db, {
   bucketName: 'images'
});