Узел + Мангуст: Получить последний вставленный идентификатор? - PullRequest
16 голосов
/ 20 мая 2011

Я хочу получить последний вставленный _id, используя mongoose в качестве оболочки MongoDB для node.js. Я нашел следующее руководство, но я не могу изменить какие-либо модули узлов, потому что приложение работает на общедоступном сервере:

Получение "последнего введенного идентификатора" (подсказка - вы должны взломать Mongoose)

Есть еще идеи? Вот что я хочу сделать:

  • Вставить нового пользователя
  • Получить _id значение пользователя
  • Установить новый сеанс на основе идентификатора пользователя
  • Перенаправление на /

Спасибо!

Ответы [ 6 ]

35 голосов
/ 20 мая 2011

Я использую версию mongoose 1.2.0, и как только я создал новый экземпляр модели mongoose, _id уже установлен.

coffee> u = new User()
[object Object]
coffee> u._id
4dd68fc449aaedd177000001

Я также подтвердил, что после вызоваu.save() _id остается прежним.Я проверил через MongoHub, что это действительно настоящий идентификатор, сохраненный в MongoDB.

5 голосов
/ 31 мая 2012

Если вы явно объявите

    _id: Schema.ObjectId

для вашей модели, то ObjectId не будет доступен после нового или сохранения. Это, вероятно, ошибка.

3 голосов
/ 29 сентября 2011

Если вы хотите получить последний вставленный _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);
                        }

                    });
0 голосов
/ 08 октября 2014

Проверьте ниже 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);
});
0 голосов
/ 02 апреля 2012

Я только что получил идентификатор из документа, переданного обратному вызову, так как сохранение возвращает сохраненный документ.

0 голосов
/ 21 мая 2011

В MongoDB, если вы явно не установите значение документа _id, драйвер клиента автоматически установит для него значение ObjectId .Это отличается от баз данных, которые могут генерировать идентификаторы на сервере, и для их получения требуется другой запрос, например, с scope_identity () или MySQL last_insert_id () .

* 1009.* Это позволяет вставлять данные асинхронно, потому что не нужно ждать, пока сервер вернет значение _id, прежде чем продолжить.

Итак, как показано в ответе Питера, _id доступен до того, какдокумент сохраняется в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...