web-dev-qa-db-ja.com

Mongooseでオブジェクトを保存した後にobjectIDを取得するにはどうすればよいですか?

var n = new Chat();
n.name = "chat room";
n.save(function(){
    //console.log(THE OBJECT ID that I just saved);
});

保存したオブジェクトのオブジェクトIDをconsole.logにしたい。 Mongooseでどうすればよいですか?

65
TIMEX

これはちょうど私のために働いた:

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を使用していますが、これはうまく動作します。念のためもう一度実行しました。

101
Richard Holland

Mongoは完全なドキュメントをコールバックオブジェクトとして送信するため、そこからのみ取得できます。

例えば

n.save(function(err,room){
  var newRoomId = room._id;
  });
37
Anathema.Imbued

_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
4
Alan

モデルを新しく作成した後、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));
3
yue

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;
  // ...
});

公式ドキュメントをご覧ください

0
Rotimi Best