MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

La query mongodb dei dati di primavera converte automaticamente String in ObjectId

Mi sembra che il problema possa essere descritto in questo modo:se usi String nelle tue classi al posto di un ObjectId, se vuoi usare quegli ID come riferimenti (senza dbrefs) in altri documenti (e documenti incorporati), vengono spinti come String (va bene perché sono stringhe). Va bene perché i dati di primavera possono mapparli di nuovo su objectid, ma non va bene se si esegue una query come quella che ho menzionato; il campo viene convertito in un objectid nel confronto (l'operatore $ne in questo caso) ma viene considerato come una stringa nel documento incorporato. Quindi, per concludere, secondo me l'operatore $ne in questo caso dovrebbe considerare il campo una stringa.

La mia soluzione è stata scrivere un convertitore personalizzato per memorizzare la stringa come id oggetto nei documenti in cui l'id è un riferimento

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;
  }
}