sql >> Databáze >  >> NoSQL >> MongoDB

Spring data mongodb dotaz převede String na ObjectId automaticky

Zdá se mi, že problém lze popsat takto:pokud použijete String ve svých třídách místo ObjectId, pokud chcete tato ID použít jako reference (bez dbrefs) v jiných dokumentech (a vložených dokumentech), budou tlačena jako String (to je v pořádku, protože jsou to řetězce). Je to v pořádku, protože jarní data je mohou znovu mapovat na objectid, ale není to v pořádku, když uděláte dotaz, jako je ten, který jsem zmínil; pole je při porovnání převedeno na objectid (v tomto případě operátor $ne), ale ve vloženém dokumentu je považováno za řetězec. Abych to uzavřel, podle mého názoru by operátor $ne v tomto případě měl považovat pole za řetězec.

Mým řešením bylo napsat vlastní převaděč pro uložení String jako objectid v dokumentech, kde je id odkaz

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. vytvořit nadřazený objekt, který vnořil děti do mongoose

  2. Play Framework 2.5 jak přidat mongoDB?

  3. Dotaz na MongoDB GridFS?

  4. Možnost promítání vrátit délku/velikost pole