Mongoosastic: TypeError: Cannot read property 'toLowerCase' of undefined
Mongoosastic: TypeError: Cannot read property 'toLowerCase' of undefined
在使用 Mongoosastic 同步模型时我收到此错误:
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 架构:
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.) 组件模式:
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.) 我的同步码:
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.) 下面是我的使用方法:
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;
这与我在我的应用程序中同步其他模型的方式完全相同,但只有这个 returns 那个错误。
我该如何解决这个问题?
目前还不清楚 from the source code 为什么 modelName
会是 undefined
...
无论如何,每个 mongoosastic
模型构造函数 accepts an index
parameter 所以我会在注册插件时声明它:
...
orderLineItemSchema.plugin(mtastic, {
esClient: esClient,
index: 'orders-index` // <---
});
let OrderLineItem = mongodb.model('OrderLineItem', orderLineItemSchema);
...
在mongoosastic仓库中有two issues个没有解决方案的关闭,提示这很可能是库中的一个错误,可能在用户代码中没有解决方案。
这些问题和你的共同点是子文档的使用,快速浏览一下库的源代码表明它可能确实与该案例的不当处理有关。
查看库的测试套件也没有显示任何涵盖这种情况的测试,进一步表明它可能根本不受支持。
在使用 Mongoosastic 同步模型时我收到此错误:
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 架构:
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.) 组件模式:
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.) 我的同步码:
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.) 下面是我的使用方法:
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;
这与我在我的应用程序中同步其他模型的方式完全相同,但只有这个 returns 那个错误。
我该如何解决这个问题?
目前还不清楚 from the source code 为什么 modelName
会是 undefined
...
无论如何,每个 mongoosastic
模型构造函数 accepts an index
parameter 所以我会在注册插件时声明它:
...
orderLineItemSchema.plugin(mtastic, {
esClient: esClient,
index: 'orders-index` // <---
});
let OrderLineItem = mongodb.model('OrderLineItem', orderLineItemSchema);
...
在mongoosastic仓库中有two issues个没有解决方案的关闭,提示这很可能是库中的一个错误,可能在用户代码中没有解决方案。
这些问题和你的共同点是子文档的使用,快速浏览一下库的源代码表明它可能确实与该案例的不当处理有关。
查看库的测试套件也没有显示任何涵盖这种情况的测试,进一步表明它可能根本不受支持。