sql >> Base de Datos >  >> NoSQL >> MongoDB

La consulta de Spring data mongodb convierte String a ObjectId automáticamente

Me parece que el problema se puede describir así:si usa String en sus clases en lugar de un ObjectId, si desea usar esos identificadores como referencias (no dbrefs) en otros documentos (y documentos incrustados), se empujan como String (está bien porque son Strings). Está bien porque los datos de primavera pueden asignarlos nuevamente a objectid, pero no está bien si realiza una consulta como la que mencioné; el campo se convierte en un objectid en la comparación (el operador $ne en este caso) pero se considera como una cadena en el documento incrustado. Entonces, para concluir, en mi opinión, el operador $ne en este caso debería considerar el campo como una cadena.

Mi solución fue escribir un convertidor personalizado para almacenar la cadena como un objectid en los documentos donde la identificación es una referencia

public class VoteWriteConverter implements Converter<Vote, DBObject> {

  @Override
  public DBObject convert(Vote vote) {
    DBObject dbo = new BasicDBObject();
    dbo.put("userid", new ObjectId(vote.getUserid()));
    dbo.put("value", vote.getValue());
    return dbo;
  }
}