var n = new Chat();
n.name = "chat room";
n.save(function(){
//console.log(THE OBJECT ID that I just saved);
});
Ich möchte die Objekt-ID des Objekts, das ich gerade gespeichert habe, in console.log speichern. Wie mache ich das in Mongoose?
Das hat gerade bei mir funktioniert:
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
$
Ich bin auf Mungo 1.7.2 und das funktioniert einwandfrei. Ich habe es nur noch einmal ausgeführt, um sicherzugehen.
Mongo sendet das gesamte Dokument als Rückrufobjekt, sodass Sie es einfach nur von dort abrufen können.
zum Beispiel
n.save(function(err,room){ var newRoomId = room._id; });
quelle
Sie können die _id manuell generieren, ohne sich später darum kümmern zu müssen, sie wieder herauszuziehen.
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
quelle
Sie können in Mongoosejs Objektid bekommen, nachdem Sie ein neues Modell haben.
Ich benutze diesen Code Arbeit in Mungo 4, Sie können es in einer anderen Version versuchen
var n = new Chat(); var _id = n._id;
oder
n.save((function (_id) { return function () { console.log(_id); // your save callback code in here }; })(n._id));
quelle
Andere Antworten haben das Hinzufügen eines Rückrufs erwähnt. Ich bevorzuge die Verwendung von .then ()
n.name = "chat room"; n.save() .then(chatRoom => console.log(chatRoom._id));
Beispiel aus den Dokumenten :.
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"); });
quelle
Mit
save
allem , was Sie brauchen nur zu tun:n.save((err, room) => { if (err) return `Error occurred while saving ${err}`; const { _id } = room; console.log(`New room id: ${_id}`); return room; });
Nur für den Fall, dass sich jemand fragt, wie man das gleiche Ergebnis erzielt, indem man
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; // ... });
Schauen Sie sich das offizielle Dokument an
quelle
Nun, ich habe folgendes:
TryThisSchema.post("save", function(next) { console.log(this._id); });
Beachten Sie den "Beitrag" in der ersten Zeile. Mit meiner Version von Mongoose habe ich keine Probleme, den Wert _id zu erhalten, nachdem die Daten gespeichert wurden.
quelle
Eigentlich sollte die ID bereits vorhanden sein, wenn das Objekt instanziiert wird
var n = new Chat(); console.log(n._id) // => 4e7819d26f29f407b0... -> ID is already allocated
Überprüfen Sie diese Antwort hier: https://stackoverflow.com/a/7480248/318380
quelle