While syncrhonizing models with Mongoosastic I am receiving this error:
TypeError: Cannot read property 'toLowerCase' of undefined at setIndexNameIfUnset (/app/node_modules/mongoosastic/lib/mongoosastic.js:239:29) at EmbeddedDocument.schemaIndex [as index] (/app/node_modules/mongoosastic/lib/mongoosastic.js:385:5) at EmbeddedDocument.postSave (/app/node_modules/mongoosastic/lib/mongoosastic.js:269:14) at next (/app/node_modules/kareem/index.js:198:31) at Kareem.execPost (/app/node_modules/kareem/index.js:217:3) at /app/node_modules/mongoose/lib/plugins/saveSubdocs.js:54:29 at each (/app/node_modules/mongoose/lib/helpers/each.js:11:5) at model. (/app/node_modules/mongoose/lib/plugins/saveSubdocs.js:53:5) at callMiddlewareFunction (/app/node_modules/kareem/index.js:482:23) at next (/app/node_modules/kareem/index.js:193:9) at next (/app/node_modules/kareem/index.js:212:9) at Kareem.execPost (/app/node_modules/kareem/index.js:217:3) at _cb (/app/node_modules/kareem/index.js:307:15) at /app/node_modules/mongoose/lib/model.js:400:5 at /app/node_modules/mongoose/lib/model.js:324:11 at runMicrotasks ()
1.) orderLineItem schema:
let orderLineItemSchema = new mongodb.Schema({
orderId: { type: String, es_indexed: true },
name: { type: String, es_indexed: true },
description: { type: String, es_indexed: true },
privateNotice: { type: String, es_indexed: true },
netPrice: { type: String, default: 0, es_indexed: true },
taxPercent: { type: Number, default: 23, es_indexed: true },
projectFile: { type: projectFileSchema, es_schema: projectFileSchema, es_indexed: true, es_type: 'nested', es_include_in_parent: true },
component: { type: [componentSchema], es_indexed: true, es_type: 'nested', es_include_in_parent: true },
additionalFiles: { type: [projectFileSchema], es_indexed: true, es_type: 'nested', es_include_in_parent: true },
status: { type: orderLineItemStatusSchema, es_indexed: true },
accepted: { type: Boolean, default: false, es_indexed: true },
archived: { type: Boolean, default: false, es_indexed: true }
}, {
timestamps: true
});
2.) projectFileSchema:
let projectFileSchema = new mongodb.Schema({
name: { type: String, es_indexed: true },
mimeType: { type: String, es_indexed: true },
path: { type: String, es_indexed: true },
archived: { type: Boolean, default: false, es_indexed: true }
});
3.) component schema:
let componentSchema = new mongodb.Schema({
name: { type: String, es_indexed: true },
category: { type: String, es_indexed: true },
componentId: { type: String, es_indexed: true },
symbol: { type: String, es_indexed: true },
archived: { type: Boolean, default: false, es_indexed: true }
});
4.) orderLineItemStatusSchema:
let orderLineItemStatusSchema = new mongodb.Schema({
name: {
type: String,
default: 'Utworzony'
}
}, {
timestamps: true
});
5.) My synchronization code:
const synchronize = (model) => {
let stream = model.synchronize();
stream.on('data', function(err, doc){
// Logging success to the console
});
stream.on('close', function(){
// Logging ...
});
stream.on('error', function(err){
console.log(err);
});
}
module.exports = synchronize;
6.) Here's how I use it:
const mongodb = require('mongoose');
const mtastic = require('mongoosastic');
const esClient = require('../dependencies/elasticsearch');
const orderLineItemSchema = require('../schemas/OrderLineItem/OrderLineItem');
const synchronizer = require('../helpers/synchronizer'); // This is the synchronization function
orderLineItemSchema.plugin(mtastic, {
esClient: esClient
});
let OrderLineItem = mongodb.model('OrderLineItem', orderLineItemSchema);
let interval = setInterval(() => {
synchronizer(OrderLineItem);
}, 10000);
module.exports = OrderLineItem;
It is the exact same way I synchronize other models in my app but only this one returns that error.
How can I fix this?
orderLineItemSchema
looks like please? – Joe - Elasticsearch Handbook