var n = new Chat();
n.name = "chat room";
n.save(function(){
//console.log(THE OBJECT ID that I just saved);
});
Tôi muốn console.log id đối tượng của đối tượng tôi vừa lưu. Làm cách nào để thực hiện điều đó trong Mongoose?
Câu trả lời:
Điều này chỉ làm việc cho tôi:
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
$
Tôi đang sử dụng mongoose 1.7.2 và điều này hoạt động tốt, chỉ cần chạy lại để chắc chắn.
Bạn có thể tạo _id theo cách thủ công, sau đó bạn không phải lo lắng về việc kéo nó ra sau.
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
bạn có thể nhận được objectid trong mongoosejs sau khi bạn mới một số mô hình.
Tôi đang sử dụng mã này hoạt động trong mongoose 4, bạn có thể thử nó trong phiên bản khác
var n = new Chat();
var _id = n._id;
hoặc là
n.save((function (_id) {
return function () {
console.log(_id);
// your save callback code in here
};
})(n._id));
Các câu trả lời khác đã đề cập đến việc thêm một cuộc gọi lại, tôi thích sử dụng .then ()
n.name = "chat room";
n.save()
.then(chatRoom => console.log(chatRoom._id));
ví dụ từ tài liệu :.
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");
});
Với save
tất cả những gì bạn chỉ cần làm là:
n.save((err, room) => {
if (err) return `Error occurred while saving ${err}`;
const { _id } = room;
console.log(`New room id: ${_id}`);
return room;
});
Đề phòng trường hợp ai đó tự hỏi làm thế nào để có được kết quả tương tự bằng cách sử dụng 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;
// ...
});
Tôi có cái này:
TryThisSchema.post("save", function(next) {
console.log(this._id);
});
Chú ý đến "bài đăng" ở dòng đầu tiên. Với phiên bản Mongoose của tôi, tôi không gặp khó khăn gì khi nhận giá trị _id sau khi dữ liệu được lưu.
Trên thực tế, ID phải ở đó khi khởi tạo đối tượng
var n = new Chat();
console.log(n._id) // => 4e7819d26f29f407b0... -> ID is already allocated
Kiểm tra câu trả lời này tại đây: https://stackoverflow.com/a/7480248/318380