@Override
  public long nextVal(String key) throws SequenceException {
    Query query = new Query(Criteria.where("_id").is(key));

    Update update = new Update();
    update.inc("seq", 1);

    FindAndModifyOptions options = new FindAndModifyOptions();
    options.returnNew(true);

    Sequence sequence = mongoOperation.findAndModify(query, update, options, Sequence.class);

    if (sequence == null) throw new SequenceException("Unable to get sequence id for key : " + key);

    return sequence.getSeq();
  }
  /**
   * Updating sequence details
   *
   * @param key
   * @return
   */
  public Long updateSequence(String key) {

    // Building query
    Query query = new Query();
    query.addCriteria(Criteria.where("_id").is(key));

    // Increase Sequence Id by 1
    Update update = new Update();
    update.inc("sequence", 1);

    FindAndModifyOptions options = new FindAndModifyOptions();
    options.returnNew(true);

    Sequence sequence = hamesDataStore.findAndModify(query, update, options, Sequence.class);

    return sequence.getSequence();
  }
  @Override
  public Comment setComment(Comment c) {
    Query q = new Query();
    q.addCriteria(
        Criteria.where("idPath")
            .is(c.getIdPath())
            .andOperator(Criteria.where("deviceId").is(c.getDeviceId())));

    Update u = new Update();
    u.set("idPath", c.getIdPath());
    u.set("idTicket", c.getIdTicket());
    u.set("content", c.getContent());
    u.set("author", c.getAuthor());
    u.set("deviceId", c.getDeviceId());
    u.set("title", c.getTitle());
    u.set("rating", c.getRating());
    u.set("realdate", c.getRealdate());
    FindAndModifyOptions options = new FindAndModifyOptions();
    options.upsert(true);
    options.returnNew(true);
    return mongoOp.findAndModify(q, u, options, Comment.class);
  }
 @Override
 public Character updateCharacter(String id, Update update) {
   Query q = new Query();
   q.addCriteria(Criteria.where("id").is(id));
   FindAndModifyOptions options = new FindAndModifyOptions();
   options.returnNew(true);
   return mongoOp.findAndModify(q, update, options, Character.class);
 }