2014-12-03 20 views
9

mam tego schematuMongoose schematu wymagają tablicę, która może być pusta

var StuffSchema = new mongoose.Schema({ 
    _id: { type: String, required: true, unique: true }, 
    name: { type: String, required: true } 
}); 

mongoose.model('Stuff', StuffSchema); 

działa dobrze.

Teraz trzeba dodać kolejny schematu „ładunek” zawierający ten

mystuff: { type:[String], ref: 'Stuff', required:true}, 

to znaczy, chcę mystuff zawierać tablicę identyfikatorów rzeczy, ale to się nie powiedzie się z powodu błędu walidacji, gdy uruchomiony ten kod

mongoose.model('Cargo').create(some data...) 

jeśli używam pustej tablicy dla pola mystuff. Wydaje się działać, jeśli mogę zmienić schemat ładunkowej do

mystuff: { type:[String], ref: 'Stuff'}, 

ale chcę pole mystuff być wymagane i pozwalają puste tablice

Co mogę zrobić, aby tak się stało?

Odpowiedz

11

Puste tablice są tworzone domyślnie (patrz także this). Atrybut required: true wymaga, aby tablica zawierała co najmniej jeden element (source code). Możesz usunąć ten atrybut, aby uzyskać pożądane zachowanie.

(bok, mangusta przypisuje domyślny _id pola z typem objectID do wszystkich schematów Stwierdzenie to jest zbędne, a przy użyciu ciąg nie jest typowy, choć na pewno dozwolone.).

Edit listopada 2017: To jest zmianą kandydata w Mongoose 5. Zobacz https://github.com/Automattic/mongoose/issues/5139.

+0

Nie sądzę, aby typ schematu * miał * być ObjectId, musi to być dowolny typ właściwości identyfikatora przywoływanego schematu. Zobacz przykład w dokumentach http://mongoosejs.com/docs/populate.html – dafyddPrys

+0

@dafyddPrys true - wyjaśniono uwagi, dzięki. – ZachB