Node + Mongoose: Получить последний вставленный ID?
Я хочу получить последний вставленный _id
, используя mongoose в качестве оболочки MongoDB для node.js. Я нашел следующий учебник, но я не могу изменить любые модули node, потому что приложение работает на общедоступном сервере:
Получение "последнего вставленного идентификатора" (подсказка - вам нужно взломать Mongoose)
Любые другие идеи? Это то, что я хочу сделать:
- Вставить нового пользователя
- Получить
_id
значение
- Установить новый сеанс на основе идентификатора пользователя
- Перенаправление на /
Спасибо!
Ответы
Ответ 1
Я использую mongoose version 1.2.0, и как только я создал новый экземпляр модели mongoose, _id
уже установлен.
coffee> u = new User()
[object Object]
coffee> u._id
4dd68fc449aaedd177000001
Я также проверил, что после вызова u.save()
_id
остается неизменным. Я проверил через MongoHub, что это действительно реальный идентификатор, сохраненный в MongoDB.
Ответ 2
Если вы явно объявляете
_id: Schema.ObjectId
для вашей модели, ObjectId не будет доступен после нового или сохранить.
Вероятно, это ошибка.
Ответ 3
Если вы хотите получить последний вставленный _id вспомогательного объекта, затем создайте объект и добавьте его в элемент. Вот пример в NowJS с использованием MongoDB и Mongoose (для добавления сахара схемы), который затем преобразует результат в JSON для отправки обратно клиенту:
var nowRoomID = this.now.room;
var Conversation = mongoose.model('Conversation');
Conversation.findById(convID, function(error, conversation) {
var Blip = mongoose.model('Blip');
var createdBlip = new Blip();
createdBlip.author= nowUserName;
createdBlip.authorid = parsed.authorid;
createdBlip.body = revisedText;
createdBlip.created_at = new Date();
createdBlip.modified_at = new Date();
conversation.blips.push(createdBlip);
parsed._id = createdBlip._id; //NOTE: ID ACCESSED HERE
message = JSON.stringify(parsed);
conversation.save(function (err) {
if (!err) {
console.log('Success - saved a blip onto a conversation!');
nowjs.getGroup(nowRoomID).now.receiveMessage(nowUserName, message);
}
});
Ответ 4
С MongoDB, если вы явно не указали значение документа _id
, тогда клиентский драйвер автоматически установит его в значение ObjectId, Это отличается от баз данных, которые могут генерировать идентификаторы на сервере и нуждаться в другом запросе для его получения, например, с SQL Server scope_identity() или MySQL last_insert_id().
Это позволяет вам вставлять данные асинхронно, потому что не нужно ждать, пока сервер вернет значение _id
, прежде чем продолжить.
Итак, как показано на примере ответа Питера, _id
доступен до того, как документ будет сохранен в базе данных.
Ответ 5
Я просто получаю идентификатор из документа, переданного обратному вызову, поскольку сохранение возвращает сохраненный документ.
Ответ 6
Проверьте ниже url
http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html
вы найдете следующий код в указанном URL
var document = {name:"David", title:"About MongoDB"};
collection.insert(document, {w: 1}, function(err, records){
console.log("Record added as "+records[0]._id);
});