MongoDB: $mit einer ObjectId array
Nur eine kurze Frage, über sowas habe ich gerade erlebt, und ich bin immer noch darüber nachzudenken, warum:
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ { "$oid" : "53f1f09f2cdcc8f339e5efa2"} , { "$oid" : "5409ae2e2cdc31c5aa0ce0a5"}]}});
0
mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ ObjectId("53f1f09f2cdcc8f339e5efa2") , ObjectId("5409ae2e2cdc31c5aa0ce0a5")]}});
2
Dachte ich, dass sowohl $ObjectId oid und Rechtschreibung-Formate, bei denen genau das gleiche für MongoDB. Weiß jemand, warum mit der ersten Abfrage return 0 Ergebnisse und mit der zweiten ist die Rückkehr 2 (die richtige Antwort)?
Darüber hinaus bin ich mit Morphia-framework verwendet MongoDB-Java-Treiber, um die Interaktion mit MongoDB. Ich habe realisiert, dass es ein problem durch die Suche mit dem $operator in ObjectIds arrays über Felder, die nicht _id nach ausführen dieses code-Zeilen:
List< ObjectId > fParams = new ArrayList< ObjectId >();
fParams.add(...);
Query<Ticket> query = genericDAO.createQuery();
query.field("idReferenceList").in(fParams);
result = genericDAO.find(query).asList();
Vielen Dank im Voraus.
Grüße,
- Luis Cappa
- genericDAO.find(query).asList(); // kannst du tun und lassen. ? Wjat ist der filter, die Sie verwenden, in diesem.createQuery(filter), durch die Art und Weise.
- Sorry, es war nur ein typo Fehler. Diese "createQuery-Methode" ist eine interne Methode, die eine Abfrage erstellt, die durch die Filterung durch die fParams Liste. In kurzen Worten, genericDAO.Finden(dies.createQuery(filter)) ist das gleiche wie genericDAO.find(query). Tut mir Leid, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese beiden Formate sind gültige Darstellungen der Objekt-id in MongoDB, laut der Dokumentation,
http://docs.mongodb.org/manual/reference/mongodb-extended-json/
und Sie unterschiedlich dargestellt in den beiden Modi,
So, um die Abfrage enthält Felder objectid, von der shell/console-Modus verwenden, benötigen Sie
ObjectId("<id>")
.Das ist die syntax einzuhalten, die mongo-shell-Modus.
Daher die Abfrage:
würde Sie wieder Zeilenanzahl.
Nun, um es über die Java-API,
Müssen Sie es tun, wie unten:
Ich Stand vor dem gleichen Problem.
Ich beschloss, dass ich gerne auf diese Weise.