Я попробовал вышеуказанное решение, но я счел его непригодным для больших объемов данных. Затем я обнаружил функцию потока:
MongoClient.connect("...", function(err, db){
var c = db.collection('yourCollection');
var s = c.find({/* your query */}).stream();
s.on('data', function(doc){
c.update({_id: doc._id}, {$set: {name : doc.firstName + ' ' + doc.lastName}}, function(err, result) { /* result == true? */} }
});
s.on('end', function(){
// stream can end before all your updates do if you have a lot
})
})
Поскольку нет способа добавить атрибут enable-false норм как часть аннотаций @field в сущности java, мы можем добавить все сопоставления (все необходимые типы с атрибутами в качестве сопоставлений) в файл mappings.json и ссылаться на этот файл в сущности. файл. Как показано ниже
@Document(indexName = "jobindex")
@Setting(settingPath = "/config/elasticsearch-settings.json")
@Mapping(mappingPath = "/config/mappings.json") //THIS ONE TO ADD
public class JobIndex implements Serializable {
}
и mappings.json выглядят как
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"norms": { "enabled": false }
}
}
}
}
ПРИМЕЧАНИЕ: когда вы добавляете в атрибут mappings.json определенные атрибуты, которые недоступны в аннотациях java @Field, лучше добавлять все полевые аннотации в файл json, а не в java @ полевые аннотации. Таким образом, вывод заключается в том, что сущность java должна быть без аннотаций полей, и все сопоставления должны быть в файле mappings.json, и этот файл должен быть указан в заголовке сущности, как упомянуто в первом блоке кода этого ответа.