Używam NodeJS do wstawiania dokumentów do MongoDB. Używając collection.insert
I mogę wstawić dokument do bazy danych jak w tym kodzie:
// ...
collection.insert(objectToInsert, function(err){
if (err) return;
// Object inserted successfully.
var objectId; // = ???
});
// ...
Jak mogę uzyskać _id
wstawiony obiekt?
Czy jest jakiś sposób na pobranie _id
bez wstawiania najnowszego obiektu _id
?
Zakładając, że w tym samym czasie wiele osób uzyskuje dostęp do bazy danych, nie mogę być pewien, czy najnowszy identyfikator to identyfikator wstawionego obiektu.
javascript
node.js
mongodb
Ionică Bizău
źródło
źródło
Krótszym sposobem niż użycie drugiego parametru dla wywołania zwrotnego
collection.insert
byłoby użycie,objectToInsert._id
który zwraca_id
(wewnątrz funkcji zwrotnej, zakładając, że była to operacja pomyślna).Sterownik Mongo dla NodeJS dołącza
_id
pole do oryginalnego odniesienia do obiektu, więc łatwo jest uzyskać wstawiony identyfikator przy użyciu oryginalnego obiektu:źródło
objectInserted
? Wydaje mi się, że brakuje Ci dokładnie sensu tej odpowiedzi: sterownik Mongo dołącza_id
pole do oryginalnego obiektu. Zredagowałem odpowiedź, aby używać jejobjectToInsert
wszędzie. Mam nadzieję, że teraz wszystko jest jaśniejsze. :)insert()
jest przestarzałe. UżyjinsertOne()
zamiast tegoJak powiedział ktretyak, najlepszym sposobem uzyskania identyfikatora wstawionego dokumentu jest użycie właściwości insertId na obiekcie wynikowym. W moim przypadku result._id nie działał, więc musiałem użyć następującego:
To samo dotyczy wywołań zwrotnych.
źródło
Właściwie zrobiłem console.log () dla drugiego parametru w funkcji zwrotnej dla wstawiania. W rzeczywistości zwracanych jest wiele informacji poza samym wstawionym obiektem. Poniższy kod wyjaśnia, jak uzyskać dostęp do jego identyfikatora.
źródło
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
. Jak mogę go użyć, aby uzyskać rzeczywisty identyfikator znajdujący się w bazie danych? ... Odpowiedź znalazłem w innym komentarzu: Użyjresult.insertedId.toString()
Mongo wysyła cały dokument jako obiekt wywołania zwrotnego, więc możesz go po prostu pobrać tylko stamtąd.
na przykład
źródło
Teraz możesz użyć metody insertOne i wyniku promise .insertedId
źródło
(doc, options, callback)
. Trzeci parametr - wywołanie zwrotne, które przyjmuje dwa parametry(error, result)
. Iresult
- tego właśnie szukasz.@JSideris, przykładowy kod do pobierania insertId.
źródło
jeśli chcesz wziąć „_id”, użyj prostego
// toString skonwertuje z hex
źródło
result.insertedId
oObjectID
obiekcie typu..toString()
przekształci ten obiekt w rzeczywisty UUID.Możesz użyć funkcji asynchronicznych, aby automatycznie uzyskać pole _id bez manipulowania obiektem danych:
Zwraca dane:
źródło
Inny sposób na zrobienie tego w funkcji asynchronicznej:
źródło