ObjectId
Są tam w sytuacjach, w których nie masz unikalnego klucza dla każdego dokumentu w kolekcji. Są unikalne, więc nie musisz się martwić o konflikty i dość dobrze dzielą się w dużych wdrożeniach bez zbytniego zmartwienia (mają swoje wady i zalety, czytaj więcej tutaj
).
ObjectId
zawiera również znacznik czasu klienta, w którym ObjectId
został wygenerowany (chyba że serwer DB jest skonfigurowany do generowania wszystkich kluczy). Dzięki temu, jak zauważyłeś, możesz użyć znacznika czasu do wykonania niektórych operacji na dacie. Jeśli jednak planujesz korzystać z agregacji Framework, przekonasz się, że nie możesz użyć ObjectId
w dowolnym dniu operacje obecnie (problem
). Jeśli chcesz użyć AF, potrzebujesz drugiego pola, które zawiera datę, niestety podwójnie przechowując ją z ObjectId
wartość wewnętrzna.
Jeśli możesz mieć pewność, że _id
Generujesz jest unikalny, więc nie ma powodu, aby używać ObjectId
w Twojej strukturze danych.