在与Mongoostic同步模型时,我收到以下错误:
TypeError:无法读取属性'toLowerCase'的未定义在setIndexNameIfUnset(/app/node_modules/mongoosastic/lib/mongoosastic.js:239: 29)在EmbeddedDocument.schema索引[作为索引](/app/node_modules/mongoosastic/lib/mongoosastic.js:385: 5)在EmbeddedDocument.post保存(/app/node_modules/mongoosastic/lib/mongoosastic.js:269: 14)在下一个(/app/node_modules/kareem/index.js:198: 31)在Kareem.execPost(/app/node_modules/kareem/index.js:217: 3)在 /app/node_modules/mongoose/lib/plugins/saveSubdocs.js:54:29在每(/app/node_modules/猫鼬/lib/助手/each.js:11: 5)在模型。/app/node_modules/kareem/index.js:193: 9)在下一个(/app/node_modules/kareem/index.js:212: 9)在Kareem.execPost(/app/node_modules/kareem/index.js:217: 3)在_cb(/app/node_modules/kareem/index.js:307: 15)在 /app/node_modules/mongoose/lib/model.js:400: 5在 /app/node_modules/mongoose/lib/model.js:324: 11在运行微任务()
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.
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;
这与我在应用程序中同步其他模型的方式完全相同,但只有这个模型返回该错误。
我怎样才能解决这个问题?
mongoosastic存储库中有两个问题在没有解决方案的情况下关闭,这表明这很可能是库中的错误,用户代码中可能没有解决方案。
这些问题和你的问题的共同点是子文档的使用,快速浏览一下库的源代码就会发现,这可能确实与对该案例的不当处理有关。
查看库的测试套件也没有显示任何涉及此场景的测试,进一步表明它可能根本不受支持。
从源代码中还不清楚为什么ModelName
将是未定义的
...
在任何情况下,每个mongoostic
model构造函数都接受一个index
参数,因此我在注册插件时会声明它:
...
orderLineItemSchema.plugin(mtastic, {
esClient: esClient,
index: 'orders-index` // <---
});
let OrderLineItem = mongodb.model('OrderLineItem', orderLineItemSchema);
...