5

nodejs mongodb mongoose と gridfs を使用しています。ファイル名でファイルを取得しようとすると、id で取得したい場合、エラーが発生します。読み取りたいファイルが存在しません。次のコード console.log("res.pic_id : " + res.pic_id) を実行すると、正しい ObjectId が取得されます。コードは次のとおりです。

var GridFS = require('GridFS').GridFS;
var myFS = new GridFS('db');
var fs = require('fs')
var Profile = db.model('Profile');
Profile.findOne({'_id' : clientID},['_id', 'username','pic_id','pic_filename'],function(err, res){
    if (err) { 
        console.log("ERROR serching user info:  " + err);
        callback(JSON.stringify(JSONRes(false, err)));
    }
    else {
         if (res) {
        console.log("res.pic_id : " + res.pic_id);
        myFS.get(res.pic_id,function(err,data){
            if (err)
                console.log("ERROR "+err)
            else {
                callback(data);
            }})
        };
        }
        else {
        callback(JSON.stringify(JSONRes(false, err)));

        }
    }
})

ありがとうございました!

4

3 に答える 3

7

同様の問題がありました。問題は、実際の ObjectID ではなく、ObjectID の文字列表現を使用していたことにあることが判明しました。これの代わりに:

var gridStore = new GridStore(db, '51299e0881b8e10011000001', 'r');

私はこれを行う必要がありました:

var gridStore = new GridStore(db, new ObjectID('51299e0881b8e10011000001'), 'r');
于 2013-02-24T05:24:43.280 に答える
4

ファイル名として保存するか、object.id を主キーとして保存する必要があります。最良の方法は、ObjectID を識別子として保存し、ファイル名をメタデータに追加して、それを使用してクエリを実行することです。

ドキュメントの 3 番目の例を見てください (これは、マングースの下にあるネイティブ ドライバーの場合です)。

http://mongodb.github.com/node-mongodb-native/api-generated/gridstore.html#open

于 2013-01-14T15:58:23.180 に答える