Solo una breve domanda su qualcosa che ho appena vissuto e sto ancora pensando perché:
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ { "$oid" : "53f1f09f2cdcc8f339e5efa2"} , { "$oid" : "5409ae2e2cdc31c5aa0ce0a5"}]}});
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ ObjectId("53f1f09f2cdcc8f339e5efa2") , ObjectId("5409ae2e2cdc31c5aa0ce0a5")]}});
Ho pensato che sia i formati di ortografia $ oid che di ObjectId erano esattamente gli stessi per MongoDB. Qualcuno sa perché con la prima query restituisce 0 risultati e con la seconda restituisce 2 (la risposta giusta)?
Inoltre, sto utilizzando il framework Morphia che utilizza il driver Java MongoDB per interagire con MongoDB. Mi sono reso conto che esiste un problema con la ricerca con $ a operatore in array objectIds su campi che non sono _ID eseguendo questo righe di codice:
List<ObjectId> fParams = new ArrayList<ObjectId>();
fParams.add(...);
Query<Ticket> query = genericDAO.createQuery();
query.field("idReferenceList").in(fParams);
result = genericDAO.find(query).asList();
Grazie mille in anticipo.
saluti,
- Luis Cappa
genericDAO.find (query) .asList(); // puoi farlo e controllare. ? Wjat è il filtro che stai usando in this.createQuery (filter), tra l'altro. – BatScream
Siamo spiacenti, era solo un errore di battitura. Questo metodo 'createQuery' è un metodo interno che crea una query filtrando dall'elenco fParams. In poche parole, genericDAO.Find (this.createQuery (filter)) è lo stesso di genericDAO.find (query). Mi dispiace per quello – lcappa