Wystarczy szybkie pytanie o czymś Właśnie doświadczyłem i ja wciąż myśleć o tym, dlaczego:
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ { "$oid" : "53f1f09f2cdcc8f339e5efa2"} , { "$oid" : "5409ae2e2cdc31c5aa0ce0a5"}]}});
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ ObjectId("53f1f09f2cdcc8f339e5efa2") , ObjectId("5409ae2e2cdc31c5aa0ce0a5")]}});
Myślałem, że oba formaty pisowni $ oid i ObjectId są dokładnie takie same dla MongoDB. Czy ktoś wie, dlaczego z pierwszym zapytaniem zwraca 0 wyników, a drugi zwraca 2 (odpowiednia odpowiedź)?
Ponadto używam architektury Morphia, która używa sterownika Java MongoDB do interakcji z MongoDB. Zdałem sobie sprawę, że istnieje problem poprzez wyszukiwanie za pomocą $ w operatora w macierzach ObjectIds nad polami, które nie są _id poprzez wykonanie tej linii kodu:
List<ObjectId> fParams = new ArrayList<ObjectId>();
fParams.add(...);
Query<Ticket> query = genericDAO.createQuery();
query.field("idReferenceList").in(fParams);
result = genericDAO.find(query).asList();
Dziękuję bardzo z góry.
Pozdrawiam,
- Luis Cappa
genericDAO.find (zapytanie) .asList(); // możesz to zrobić i sprawdzić. ? Wjat jest przy okazji filtrem, którego używasz w this.createQuery (filter). – BatScream
Niestety, był to tylko błąd literówki. Ta metoda "createQuery" jest wewnętrzną metodą, która tworzy zapytanie przez filtrowanie według listy fParams. Krótko mówiąc, genericDAO.Find (this.createQuery (filter)) jest taki sam jak genericDAO.find (zapytanie). Przepraszam za to. – lcappa