Search code examples
node.jsmongodbelasticsearchmongoosastic

When deleting records from mongoDB, elastics is not syncing with it


Somebody please tell me why aren't syncing my mogoosastic and mongodb? When I delete records from mongoDB, records still are seen, until the server is restarted. this is me search function

exports.search = function (req, res) {
  if (!req.query.q) return res.status(400).send('No Query Provided')
  log.error(req.query.q)

  var query = {
    query_string: {
      filtered: {
        query: {
          multi_match: {query: req.query.q,}
        },
        filter: {term: {isDeleted: false}
        }
      }
    }
  }

  User.search(query, (err, results) => {
    if (err) return handleError1(res, err)
    var ret = _.map(results.hits.hits, result => ({
      userID: result._id,
      _score: result._score,
      name: result._source.name,
      loc: result._source.loc,
      info: result._source.info,
      images: result._source.images,
    }))
    return res.send(ret)
  })
}

And this one is my Schema declaration

isDeleted: {type: Boolean, required: true, default: false, es_indexed: true}

what is wrong with this code...


Solution

  • I added this line of code and everything was ok

    .then(groups => {
          return User.findById(uid).exec()
        })
        .then(user => {
          let email = user.credentials.loginEmail + '_' + moment().format('YYYYMMDDEHHmmss')
          if(app.get('env') === 'localtest') {
            email = user.credentials.loginEmail + '_deleted'
          }
          user.credentials.loginEmail = email;
          user.isDeleted = true;
          user.updated.at = new Date();
          user.save()
            .then(user_ =>{
              user.sendInfoUpdate()
              return res.status(204).send()
            })
            .catch(err => {
              return handleError(res, err)
            })
        })
        .catch(err => {
          return handleError(res, err)
        })