const mongoose = require('mongoose').set('debug', false); const Schema = mongoose.Schema; const escapeStringRegexp = require('escape-string-regexp'); mongoose.Promise = global.Promise; mongoose.level = 'F'; const tools = require('../tools/general'); const { ObjectId } = require('mongodb'); const shared_consts = require('../tools/shared_nodejs'); // Resolving error Unknown modifier: $pushAll mongoose.plugin(schema => { schema.options.usePushEach = true; }); const ProvinceSchema = new Schema({ _id: { type: Number, }, reg: { type: String, }, prov: { type: String, // unique: true, maxlength: 3, }, descr: { type: String, }, link_grp: { type: String, }, card: { type: String, }, link_telegram: { type: String, }, lat: { type: Number, }, long: { type: Number, }, }, { _id: false }); ProvinceSchema.pre('save', async function (next) { if (this.isNew) { const myrec = await Province.findOne().limit(1).sort({ _id: -1 }); if (!!myrec) { if (myrec._doc._id === 0) this._id = 1; else this._id = myrec._doc._id + 1; } else { this._id = 1; } } next(); }); ProvinceSchema.statics.getRegionByStrProvince = async function (strprovince) { const myrec = await Province.findOne({ prov: strprovince }).lean(); if (myrec) { return myrec.reg; } return ''; } ProvinceSchema.statics.getStrProvinceByProv = async function (prov) { const myrec = await Province.findOne({ prov }).lean(); if (myrec) { return myrec.descr; } return ''; } ProvinceSchema.statics.getFieldsForSearch = function () { return [ { field: 'prov', type: tools.FieldType.string }, { field: 'descr', type: tools.FieldType.string }, ]; }; ProvinceSchema.statics.executeQueryTable = function (idapp, params) { params.fieldsearch = this.getFieldsForSearch(); const strfind = params.search; if (strfind === '') { return []; } return tools.executeQueryTable(this, 0, params); }; ProvinceSchema.statics.executeQueryPickup = async function (idapp, params) { const strfind = params.search; if (strfind === '') { return []; } let filterfindexact = { descr: strfind }; const risexact = await Province.find(filterfindexact).lean(); let filterfind = {}; filterfind = { descr: { $regex: '^' + strfind, $options: 'i' } }; const ris = await Province.find(filterfind).lean().limit(10); return [...risexact, ...ris]; }; ProvinceSchema.statics.findAllIdApp = async function (idapp) { const myfind = {}; return Province.find(myfind).sort({ descr: 1 }).lean(); }; ProvinceSchema.statics.setCoordinatesOnDB = async function () { const arrprov = await Province.find({}).lean(); // Funzione per ottenere le coordinate di tutte le città for (const prov of arrprov) { if (!prov.lat) { let coord = await tools.getCityCoordinates(prov); if (coord) { let ris = await Province.findOneAndUpdate({ _id: prov._id }, { $set: { lat: coord.lat, long: coord.long } }, { new: true }); console.log(' *** Update ', prov.descr, 'lat', ris.lat, 'long', ris.long); } } } }; const Province = mongoose.model('Province', ProvinceSchema); Province.createIndexes() .then(() => { }) .catch((err) => { throw err; }); module.exports = { Province };