From b014225b73bbad8b286340531a3604f50e1d9ae5 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 1 May 2018 12:02:39 -0600 Subject: [PATCH] fixes for index creation --- models/index.js | 34 +++++++++++++++++++++ models/schema/index.js | 15 +-------- plugin-api/beta/server/getReactionConfig.js | 2 +- services/mongoose.js | 6 +--- 4 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 models/index.js diff --git a/models/index.js b/models/index.js new file mode 100644 index 000000000..c783f43e7 --- /dev/null +++ b/models/index.js @@ -0,0 +1,34 @@ +const { reduce } = require('lodash'); +const { CREATE_MONGO_INDEXES } = require('../config'); + +const Action = require('./action'); +const Asset = require('./asset'); +const Comment = require('./comment'); +const Migration = require('./migration'); +const Setting = require('./setting'); +const User = require('./user'); + +const schema = { Action, Asset, Comment, Migration, Setting, User }; + +// Provide the schema to each of the plugins so that they can add in indexes if +// it is enabled. +if (CREATE_MONGO_INDEXES) { + const plugins = require('../services/plugins'); + + // Remap all of the models to their driver reference via the `collection` + // field. + const collections = reduce( + schema, + (collections, model, modelName) => { + collections[modelName] = model.collection; + return collections; + }, + {} + ); + + // Defer the instantiation of the index caller functions when we're creating + // indexes. + plugins.defer('server', 'indexes', ({ indexes }) => { + indexes(collections); + }); +} diff --git a/models/schema/index.js b/models/schema/index.js index 976b437c0..c33402078 100644 --- a/models/schema/index.js +++ b/models/schema/index.js @@ -1,5 +1,3 @@ -const { CREATE_MONGO_INDEXES } = require('../../config'); - const Action = require('./action'); const Asset = require('./asset'); const Comment = require('./comment'); @@ -7,15 +5,4 @@ const Migration = require('./migration'); const Setting = require('./setting'); const User = require('./user'); -const schema = { Action, Asset, Comment, Migration, Setting, User }; - -// Provide the schema to each of the plugins so that they can add in indexes if -// it is enabled. -if (CREATE_MONGO_INDEXES) { - const plugins = require('../../services/plugins'); - plugins.get('server', 'indexes').map(({ indexes }) => { - indexes(schema); - }); -} - -module.exports = schema; +module.exports = { Action, Asset, Comment, Migration, Setting, User }; diff --git a/plugin-api/beta/server/getReactionConfig.js b/plugin-api/beta/server/getReactionConfig.js index da075d76c..68dc3dd5d 100644 --- a/plugin-api/beta/server/getReactionConfig.js +++ b/plugin-api/beta/server/getReactionConfig.js @@ -128,7 +128,7 @@ function getReactionConfig(reaction) { return { typeDefs, indexes: ({ Comment }) => { - Comment.index( + Comment.ensureIndex( { created_at: 1, [`action_counts.${sc(reaction)}`]: 1, diff --git a/services/mongoose.js b/services/mongoose.js index 4e242cf47..48cd34012 100644 --- a/services/mongoose.js +++ b/services/mongoose.js @@ -63,10 +63,6 @@ module.exports = mongoose; // here. No point also in importing this if we're not actually doing any // indexing now. if (CREATE_MONGO_INDEXES) { - require('../models/action'); - require('../models/asset'); - require('../models/comment'); - require('../models/setting'); - require('../models/user'); + require('../models'); require('./migration'); }