Jeśli masz tablice dokumentów, Mongoose automatycznie tworzy identyfikatory dla każdego z nich. Przykład:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Czy istnieje sposób, aby powiedzieć Mongoose, aby nie tworzył identyfikatorów obiektów w tablicy?
node.js
mongodb
mongoose
subdocument
Atlas
źródło
źródło
_id
pola nawet w kolekcji subSchema, czy tylko w przypadku, gdy subSchema jest używana do osadzania jako tablicy elementów pod-dokumentów? Zadaję to szczególnie ze względu na moje dzisiejsze pytanie dotyczące SO.{ _id: false }
, oba poziomy pod-schematu są pozbawione identyfikatorów. Jest jakiś sposób obejścia tego zachowania?{ _id : true }
?let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });
na to:let studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });
i to zatrzymało_id
tworzenie nastudentSchema
zachowanym_id
stworzeniu na obiektach wperformance
tablicy pod-dokumentów. Nie wiem, czy oba_id: false
iid: false
są potrzebne.Możesz tworzyć dokumenty podrzędne bez schematu i unikać
_id
. Po prostu dodaj_id:false
do deklaracji dokumentu podrzędnego.Zapobiegnie to utworzeniu
_id
pola w twoim subdoc.Testowany w Mongoose
v5.9.10
źródło
Dodatkowo, jeśli używasz składni literału obiektu do określenia pod-schematu, możesz również dodać,
_id: false
aby go wyłączyć.źródło
Używam mangusty 4.6.3 i wszystko, co musiałem zrobić, to dodać _id: fałsz w schemacie, nie trzeba tworzyć podschemy.
źródło
_id
jest polem, a nie ograniczeniem._id = mongoose.Types.ObjectId()
, czy to byłoby unikalne w całej kolekcji?Możesz użyć jednego z nich
lub
Sprawdź swoją wersję mangusty przed skorzystaniem z drugiej opcji
źródło
Jeśli chcesz użyć predefiniowanego schematu (z _id) jako dokumentu podrzędnego (bez _id), możesz wykonać teorię w następujący sposób:
Ale to nie działało dla mnie. Dodałem więc, że:
Teraz mogę dołączyć subSourceSchema do mojego dokumentu nadrzędnego bez _id. Nie jestem pewien, czy jest to czysty sposób na zrobienie tego, ale działa.
źródło