最近リレーショナル データベースから切り替えたので、MongoDB で概念的な問題が発生しています。
次のような画像を保存しようとしています:
exports.save = function ( input, image, callback) {
console.log('Image Provider, trying to handle image ...');
input.date = new Date();
if (input._id) {
input._id = new ObjectID(input._id);
}
console.log("image is " + image + " image size is " + image.size);
if (image && image.size) {
var data = fs.readFileSync(image.path);
input.image = new MongoDb.Binary(data);
input.imageType = image.headers['content-type'];
input.imageName = image.name;
console.log("input is " + input);
}
db.collection("images", function (error, collection) {
collection.save(input, {safe: true}, callback);
});
};
これは次のように呼ばれます。
ImageProvider.save(input, function(err, objects) {
input.image_id = objects._id;
console.log('[inside] objects id is ' + input.image_id);
if (err) {
// do something
} else {
// do something else
}
});
別のコレクションで image _id を使用したいのですが、基本的にはこの画像オブジェクトへの参照を画像コレクションに挿入します。非同期呼び出しのため、次のオブジェクトを他のコレクションに挿入すると、_id はまだ利用できません。
別のコレクションオブジェクトへの参照を挿入するための標準的なパターンはありますか、または同じコレクションに全体 (他のオブジェクト) を挿入するだけの最良の方法ですか?
アップデート:
基本的に SAVE 関数を呼び出す前に ObjectID を作成するという解決策/戦略を見つけました
何かのようなもの :
ObjectID = MongoDb.ObjectID;
input._id = new ObjectID();
次に、入力を保存します。この場合、非同期呼び出しが戻るまでにどれだけ時間がかかっても、_id は常に有効です。