diff --git a/docs/faq.md b/docs/faq.md index 8ae6a441b35..a0d493bc879 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -314,7 +314,7 @@ const Kitten = connection.model('Kitten', kittySchema); **Q**. How can I change mongoose's default behavior of initializing an array path to an empty array so that I can require real data on document creation? -**A**. You can set the default of the array to a function that returns `undefined`. +**A**. You can set the default of the array to `undefined`. ```javascript const CollectionSchema = new Schema({ @@ -329,13 +329,13 @@ const CollectionSchema = new Schema({ **Q**. How can I initialize an array path to `null`? -**A**. You can set the default of the array to a function that returns `null`. +**A**. You can set the default of the array to [`null`](https://masteringjs.io/tutorials/fundamentals/null). ```javascript const CollectionSchema = new Schema({ field1: { type: [String], - default: () => { return null; } + default: null } }); ``` diff --git a/lib/schema/array.js b/lib/schema/array.js index 67fe713a99b..00774ee3147 100644 --- a/lib/schema/array.js +++ b/lib/schema/array.js @@ -111,7 +111,7 @@ function SchemaArray(key, cast, options, schemaOptions) { fn = typeof defaultArr === 'function'; } - if (!('defaultValue' in this) || this.defaultValue !== void 0) { + if (!('defaultValue' in this) || this.defaultValue != null) { const defaultFn = function() { // Leave it up to `cast()` to convert the array return fn diff --git a/test/document.test.js b/test/document.test.js index 3237b118acb..bc94ee255d6 100644 --- a/test/document.test.js +++ b/test/document.test.js @@ -3198,6 +3198,23 @@ describe('document', function() { assert.ok(!('names' in doc)); }); + it('can set array default to null (gh-14717)', async function() { + const schema = new Schema({ + names: { + type: [String], + default: null + } + }); + + const Model = db.model('Test', schema); + const m = new Model(); + assert.strictEqual(m.names, null); + await m.save(); + + const doc = await Model.collection.findOne({ _id: m._id }); + assert.strictEqual(doc.names, null); + }); + it('validation works when setting array index (gh-3816)', async function() { const mySchema = new mongoose.Schema({ items: [