Mongoose에서 객체를 저장 한 후 어떻게 objectID를 얻습니까?


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

방금 저장 한 개체의 개체 ID를 console.log하고 싶습니다. 몽구스에서 어떻게하나요?

답변:


116

이것은 나를 위해 일했습니다.

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
$

나는 몽구스 1.7.2를 사용하고 있으며 이것은 잘 작동하며 확인하기 위해 다시 실행했습니다.


9
정의되지 않은 방 객체는 n 저장 오류를 나타냅니다. 문서에 액세스하기 전에 오류 검사를 수행하는 것이 가장 좋습니다.
ChrisMcJava

3
n._id와 n.id 모두 mongoose 3.8.21
ChrisMcJava

@ChrisMcJava 귀하의 의견은 생명의 은인이었습니다! 많은 라인과 많은 함수를 코딩 할 때 때때로 나중에 오류 처리를 남겨두고 나중에 LOL을 절대로 또는 잊을 수 있습니다. 감사합니다.
ksugiarto

누군가가 나중에 답을 더 간결하게 작성했지만이 답변의 추가 부분이 더 도움이 될 것이라고 생각합니다. 이를 위해 나는이 사람에게 찬성 투표를하였습니다 (8 년 후, 그 이하도 아닙니다).
Cheesus Toast

43

Mongo는 전체 문서를 콜백 객체로 전송하므로 여기에서만 가져올 수 있습니다.

예를 들면

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

10

_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

알아두면 매우 도움이되며 동기식으로 할 때 비동기 코드를 방지했습니다. 감사!
ryanm

그게 원래하려고했던 일 이었지만 솔직히 말할 필요는 없다고 생각합니다. 그래도 다른 질문에 대답 할 것입니다.
Cheesus Toast

9

데이터베이스에 저장할 필요없이 새 개체 인스턴스를 만든 직후 Mongoose에서 개체 ID를 가져올 수 있습니다.

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));

2

다른 답변은 콜백 추가에 대해 언급했으며 .then () 사용하는 것을 선호합니다.

n.name = "chat room";
n.save()
.then(chatRoom => console.log(chatRoom._id));

문서의 예 :.

var gnr = new Band({
  name: "Guns N' Roses",
  members: ['Axl', 'Slash']
});

var promise = gnr.save();
assert.ok(promise instanceof Promise);

promise.then(function (doc) {
  assert.equal(doc.name, "Guns N' Roses");
});

1

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

공식 문서 확인


1

글쎄, 나는 이것을 가지고있다.

TryThisSchema.post("save", function(next) {
    console.log(this._id);
});

첫 번째 줄의 "post"를 확인하십시오. 내 버전의 Mongoose에서는 데이터가 저장된 후 _id 값을 얻는 데 문제가 없습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.