sql >> Databasteknik >  >> NoSQL >> MongoDB

Spring data mongodb-fråga konverterar String till ObjectId automatiskt

Det verkar för mig att problemet kan beskrivas så här:om du använder String i dina klasser istället för ett ObjectId, om du vill använda dessa id som referenser (inga dbrefs) i andra dokument (och inbäddade dokument), pushas de som sträng (det är ok eftersom de är strängar). Det är bra eftersom vårdata kan mappa dem igen till objectid, men det är inte bra om du gör en fråga som den jag nämnde; fältet konverteras till ett objekt-id i jämförelsen (operatorn $ne i detta fall) men betraktas som en sträng i det inbäddade dokumentet. Så, för att sammanfatta, enligt min åsikt bör $ne-operatorn i det här fallet betrakta fältet som en sträng.

Min lösning var att skriva en anpassad omvandlare för att lagra strängen som ett objekt-id i dokument där id är en referens

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. MongoDB och upsert-problem

  2. Flask mongoengine ansluta genom uri

  3. Hur man implementerar transaktion med återställning i Redis

  4. kan inte döda redis-server på linux