var n = new Chat();
n.name = "chat room";
n.save(function(){
//console.log(THE OBJECT ID that I just saved);
});
保存したオブジェクトのオブジェクトIDをconsole.logにしたい。 Mongooseでどうすればよいですか?
これはちょうど私のために働いた:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/lol', function(err) {
if (err) { console.log(err) }
});
var ChatSchema = new Schema({
name: String
});
mongoose.model('Chat', ChatSchema);
var Chat = mongoose.model('Chat');
var n = new Chat();
n.name = "chat room";
n.save(function(err,room) {
console.log(room.id);
});
$ node test.js
4e3444818cde747f02000001
$
私はmongoose 1.7.2を使用していますが、これはうまく動作します。念のためもう一度実行しました。
Mongoは完全なドキュメントをコールバックオブジェクトとして送信するため、そこからのみ取得できます。
例えば
n.save(function(err,room){
var newRoomId = room._id;
});
_idを手動で生成することができ、後でそれを引き出すことを心配する必要はありません。
var mongoose = require('mongoose');
var myId = mongoose.Types.ObjectId();
// then set it manually when you create your object
_id: myId
// then use the variable wherever
モデルを新しく作成した後、mongoosejsでobjectidを取得できます。
私はこのコードをmongoose 4で使用していますが、他のバージョンで試すことができます
var n = new Chat();
var _id = n._id;
または
n.save((function (_id) {
return function () {
console.log(_id);
// your save callback code in here
};
})(n._id));
save
を使用すると、必要な作業は次のとおりです。
n.save((err, room) => {
if (err) return `Error occurred while saving ${err}`;
const { _id } = room;
console.log(`New room id: ${_id}`);
return room;
});
誰かがcreate
を使用して同じ結果を得る方法を知りたい場合に備えて:
const array = [{ type: 'Jelly bean' }, { type: 'snickers' }];
Candy.create(array, (err, candies) => {
if (err) // ...
const [jellybean, snickers] = candies;
const jellybeadId = jellybean._id;
const snickersId = snickers._id;
// ...
});