我在MEAN堆栈程序中有mongoosastic设置。一切正常,除非我从mongodb删除文档时,它不会在elasticsearch索引中删除。所以每次我进行包含删除项目的搜索时,都会返回已删除的项目,但是当它被水合时它会为null。 mongoosastic处理从ES索引删除?我是否必须编制索引刷新程序?
var mongoose = require('mongoose');
var mongoosastic = require("mongoosastic");
var Schema = mongoose.Schema;
var quantumSchema = new mongoose.Schema({
note: {
type: String,
require: true,
es_indexed: true
}
});
quantumSchema.plugin(mongoosastic);
var Quantum = mongoose.model('Quantum', quantumSchema);
Quantum.createMapping(function(err, mapping){
if(err){
console.log('error creating mapping (you can safely ignore this)');
console.log(err);
}else{
console.log('mapping created!');
console.log(mapping);
}
});
答案 0 :(得分:0)
我通过改变删除数据的方式解决了这个问题。
我正在使用:
Quantum.findByIdAndRemove(quantumid)
我把它改为:
Quantum.findById(quantumid, function(err, quantum) {
quantum.remove(function(err, quantum) {
if (err) {
console.log(err);
return;
}
});
});
我没有研究这项工作的原因,但它解决了这个问题,我继续前进。
答案 1 :(得分:0)
我不知道您使用的是什么版本的mongoosastic但我使用mongoosastic@3.6.0并且每当我使用Model.findByIdAndRemove
或Model.remove
将其删除时,我的索引文档都会被删除。因此,请尝试交叉检查您删除文档的方式。
答案 2 :(得分:0)
我有同样的错误。如果您查看 Documentation,它指出您必须在删除文档后明确删除该文档。 这就是我现在做删除的方式。
const deleteOne = Model => async (id)=> {
const document = await Model.findByIdAndDelete(id);
if (!document) {
return new Result()
.setSuccess(false)
.setError('Unable to delete Entity with ID: ' + id + '.')
}
//this ensures the deletion from the elasticsearch index
document.remove();
return new Result()
.setSuccess(true)
.setData(document)
}