var n = new Chat();
n.name = "chat room";
n.save(function(){
//console.log(THE OBJECT ID that I just saved);
});
我想 console.log 我刚刚保存的对象的对象 ID。我如何在猫鼬中做到这一点?
这对我有用:
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 上,这工作得很好,只是再次运行它以确保。
Mongo 将完整的文档作为回调对象发送,因此您只能从那里简单地获取它。
例如
n.save(function(err,room){
var newRoomId = room._id;
});
您可以手动生成 _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
您可以在创建新对象实例后立即在 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));
其他答案提到了添加回调,我更喜欢使用 .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");
});
好吧,我有这个:
TryThisSchema.post("save", function(next) {
console.log(this._id);
});
注意第一行的“post”。使用我的 Mongoose 版本,我可以在保存数据后轻松获取 _id 值。
实际上,在实例化对象时 ID 应该已经存在
var n = new Chat();
console.log(n._id) // => 4e7819d26f29f407b0... -> ID is already allocated
在这里检查这个答案: https ://stackoverflow.com/a/7480248/318380
您只需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;
// ...
});
根据 Mongoose v5.x 文档:
该
save()
方法返回一个承诺。如果save()
成功,promise 将解析为已保存的文档。
使用它,这样的事情也将起作用:
let id;
n.save().then(savedDoc => {
id = savedDoc.id;
});
使用异步函数
router.post('/create-new-chat', async (req, res) => {
const chat = new Chat({ name : 'chat room' });
try {
await chat.save();
console.log(chat._id);
}catch (e) {
console.log(e)
}
});