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

Spring data mongodb forespørgsel konverterer String til ObjectId automatisk

Det forekommer mig, at problemet kan beskrives sådan her:hvis du bruger String i dine klasser i stedet for et ObjectId, hvis du vil bruge disse id'er som referencer (ingen dbrefs) i andre dokumenter (og indlejrede dokumenter), bliver de skubbet som streng (det er ok, fordi de er strenge). Det er fint, fordi forårsdata kan kortlægge dem igen til objectid, men det er ikke fint, hvis du laver en forespørgsel som den, jeg nævnte; feltet konverteres til et objektid i sammenligningen ($ne operatoren i dette tilfælde), men betragtes som en streng i det indlejrede dokument. Så for at afslutte, efter min mening bør $ne-operatoren i dette tilfælde betragte feltet som en streng.

Min løsning var at skrive en brugerdefineret konverter til at gemme strengen som et objekt-id i de dokumenter, hvor id'et er en reference

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



  1. Indlejrede arrays i Mongoose

  2. konfiguration max gammel pladsstørrelse i Nodejs

  3. Hvordan kan jeg sikkert oprette forbindelse til Heroku-hostede Redis fra kommandolinjen?

  4. Installer mongodb på mac os 10.15 til php7