Kiedy używam Mongodb z Javą, chcę wygenerować identyfikator obiektu na klientach. Zanim jednak wstawię rekord, muszę najpierw zapytać o mongodbę, aby upewnić się, że identyfikator generowany przez metodę ObjectId() jest unikalny. Czy jest jakiś sposób, aby wygenerować unikalny identyfikator obiektu bez uzyskiwania dostępu do mongodb dwa razy?Jak wygenerować unikalny identyfikator obiektu w mongodb
Odpowiedz
Identyfikatory obiektów nie przypominają identyfikatorów sekwencyjnych używanych w RDMS. Jeśli są prawidłowo wygenerowane zgodnie z Object ID specification, nie musisz się martwić, że są unikatowe.
Wszystko, co musisz zrobić, to upewnić się, że zawsze tworzysz nowy identyfikator obiektu, zamiast go ponownie wykorzystywać.
Możesz wygenerować ObjectId na kliencie bez konsultacji z bazą danych. Identyfikator taki będzie unikalny (będziesz musiał bardzo się starać, aby uzyskać dwa identyczne identyfikatory obiektów).
ObjectId id = new ObjectId();
// or this
ObjectId id = ObjectId.get();
Tam różnicy między tymi dwoma sposobami? Pozdrawiam – DanielPanic
Bez różnicy. ObjectId # get just wywołuje konstruktora. –
jak to działa? czy to javascript? – Jennifer
Od MongoDB Java Driver 3.3.0, istnieją następujące sposoby tworzenia ObjectIds.
Korzystanie z konstruktora bez parametrów:dostarcza unikalnych objectID
1. ObjectId id1 = new ObjectId(); //Generates unique id
1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId();
Korzystanie parametryzowanej konstruktorów:parametry wpływają na wyjątkowość objectID
2. public ObjectId(byte[] bytes) // Receives a byte array of size 12.
3. public ObjectId(String hexString) //Receives a String that is a hexadecimal representation of 12 bytes.
4. public ObjectId(Date date) // Receives a Date object
5. public ObjectId(Date date, int counter) //Receives date and a counter
6. public ObjectId(Date date,
int machineIdentifier,
short processIdentifier,
int counter) //Receives Date, MachineId, PID and counter.
7. public ObjectId(int timestamp,
int machineIdentifier,
short processIdentifier,
int counter) //Receives Epoch time in sec, MachineId, PID and counter.
Understanding CEL d:
ObjectId składa się z 12 bajtów dzieli się następująco:
ObjectID layout
0 1 2 3 4 5 6 7 8 9 10 11
|time |machine |pid |inc |
- 1. Jak wygenerować unikalny identyfikator w Dart
- 2. Jak wygenerować unikalny identyfikator żądania w Railsach?
- 3. Czy istnieje unikalny identyfikator obiektu w Pythonie
- 4. Jak wygenerować unikalny identyfikator stałej długości w Javie?
- 5. Unikalny identyfikator sesji w pythonie
- 6. Kryptograficznie bezpieczny unikalny identyfikator
- 7. Identyfikator UDID urządzenia Android lub unikalny identyfikator?
- 8. Jak uzyskać unikalny identyfikator JVM?
- 9. Znaczniki NFC unikalny identyfikator
- 10. lokalnie unikalny identyfikator
- 11. MongoDB: Unikalność identyfikatora obiektu
- 12. Unikalny identyfikator pliku w oknach
- 13. Mongodb unikalny rzadki indeks
- 14. Szynowe powiązania polimorficzne bez typu (unikalny identyfikator)
- 15. Identyfikator obiektu JavaScript
- 16. Jak przypisać unikalny identyfikator elementu DOM
- 17. Jak dodać unikalny identyfikator dwukolumnowy do mongody w aplikacji meteorów?
- 18. Znajdź dokument z identyfikatorem obiektu w mongoDB
- 19. log4net unikalny identyfikator żądania w ASP.NET
- 20. Jak mogę wygenerować identyfikator GUID w Vimie?
- 21. Jak wygenerować identyfikator GUID w VBScript?
- 22. Jak zdobyć unikalny identyfikator urządzenia i spójne na urządzeniu Apple
- 23. Jak wygenerować unikalny URL dla obrazów (imgur.com like) w php?
- 24. C# GUID i unikalny identyfikator SQL
- 25. Unikalny identyfikator pliku Dropbox - RESTful API
- 26. iOS 8, PhotoKit, PHAsset, unikalny identyfikator
- 27. MySQL unikalny identyfikator lub łączone id
- 28. Android - unikalny i stały identyfikator urządzenia
- 29. Jak wygenerować identyfikator GUID dla ciągu?
- 30. Excel 2007 - Wygeneruj unikalny identyfikator na podstawie tekstu?
Więc jeśli generuję identyfikator przez: Id identyfikatora obiektu = nowy ObjectId(); to identyfikator musi być już unikatowy? Dziękuję – NOrder
@vienna Poprawnie. Trzeba tylko upewnić się, aby wywoływać go za każdym razem, gdy zapisujesz rekord w bazie danych. –