Tôi cũng đang tìm kiếm câu trả lời này và tôi không chắc rằng tôi thích truy cập tài liệu cuối cùng của mảng. Tuy nhiên, tôi có một giải pháp thay thế. Phương thức m['b'].push
sẽ trả về một số nguyên, 1 hoặc 0 - Tôi giả định rằng điều đó dựa trên sự thành công của lần đẩy (về mặt xác thực). Tuy nhiên, để có quyền truy cập vào tài liệu con và đặc biệt là _id của tài liệu con - bạn nên sử dụng create
trước tiên, sau đó đến push
.
Mã như sau:
var subdoc = m['b'].create({ ba: 234, bb: "World" });
m['b'].push(subdoc);
console.log(subdoc._id);
m.save(function(err, model) { console.log(arguments); });
Điều đang xảy ra là khi bạn truyền đối tượng vào phương thức push hoặc create, việc ép kiểu Schema sẽ xảy ra ngay lập tức (bao gồm những thứ như xác nhận và ép kiểu) - điều này có nghĩa là đây là thời điểm ObjectId được tạo; không phải khi mô hình được lưu trở lại Mongo. Trên thực tế, mongo không tự động gán giá trị _id cho các tài liệu con, đây là một tính năng của mongoose. Mongoose create được ghi lại ở đây:tạo tài liệu
Do đó, bạn cũng nên lưu ý rằng mặc dù bạn có _id tài liệu con - nó vẫn chưa có trong Mongo cho đến khi bạn lưu nó, vì vậy hãy cẩn thận với bất kỳ hành động DOCRef nào mà bạn có thể thực hiện.