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?
Antworten:
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;
});
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
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));
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");
});
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;
// ...
});
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.
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