2017-01-18 4 views
0

Ich habe diese beiden Dokumente in meiner mongoDB Datenbank:MongoDB - seltsame Verhalten der Abfrage

db.DocumentFile.find().pretty() 
{ 
"_id" : ObjectId("587f39910cc0fec092bdb10c"), 
"_class" : "com.smartinnotec.legalprojectmanagement.dao.domain.DocumentFile", 
"fileName" : "DocumentFile1", 
"ending" : "jpg", 
"projectId" : "587f39910cc0fec092bdb10b", 
"active" : true, 
"userIdBlackList" : [ 
    "587f39910cc0fec092bdb10a" 
] 
} 
{ 
"_id" : ObjectId("587f39910cc0fec092bdb10d"), 
"_class" : "com.smartinnotec.legalprojectmanagement.dao.domain.DocumentFile", 
"fileName" : "DocumentFile2", 
"ending" : "jpg", 
"projectId" : "587f39910cc0fec092bdb10b", 
"active" : true, 
"userIdBlackList" : [ ] 
} 

ich diesen Code haben, um Menge der Abfrage zu erhalten:

final Query query = new Query(); 
query.addCriteria(Criteria.where("‌​userIdBlackList").nin(userId)); 

final Long amount = mongoTemplate.count(query, DocumentFile.class); 
return amount.intValue(); 

Die Menge ist 2 in dieser Fall, was ist falsch - es 1. Die Abfrage in Query-Objekt wie folgt aussieht sein soll:

Query: { "‌​userIdBlackList" : { "$nin" : [ "587f39910cc0fec092bdb10a"]}} 

Wenn ich diese Abfrage und machte eine Abfrage für die mongodb Konsole wie folgt kopieren:

db.DocumentFile.find({ "‌​userIdBlackList" : { "$nin" : [ "587f39910cc0fec092bdb10a"]}}).pretty() 

ich eine Menge von zwei Kindern, was falsch, wenn da ein Dokument 587f39910cc0fec092bdb10a in userIdBlackList umfasst -> es sein sollte.

Mit dieser Abfrage Befehl:

db.DocumentFile.find({userIdBlackList: { "$nin": ["587f39910cc0fec092bdb10a"] } }).pretty(); 

ich das richtige Ergebnis, ich bin wirklich im Moment verwirrt. Hat jemand eine Idee? Vielleicht ist das Problem, dass einmal userIdBlackList ist mit Anführungszeichen ("userIdBlackList") und das andere Mal ist es nicht.

+0

Speichern Sie MongoIds im userIdBlackList-Array-Feld? Oder Schnur? –

+0

Strings, die ID Strings uf den Benutzern – quma

+0

Es ist wirklich verrückt, ich benutze Benutzerzeichenfolgen, es funktioniert nicht, als @DBRef zu Benutzerobjekt, funktioniert nicht, jetzt ObjectId, immer noch nicht funktioniert. Eigentlich ist es nicht klar für meine, warum dies solche Probleme macht mit Spring Data und MongoDB – quma

Antwort

0

Ich denke, das Problem ist mit der unbeabsichtigten Formatierung für "userIdBlackList" abgeholt. Ihre Zeichenfolge wird mit nicht druckbaren Zeichen in "??userIdBlackList" für alle Ihre Suchanfragen interpretiert. Ich sehe kleine transparente quadratische Kästchen, wenn ich deine Abfragen in die Mongo-Shell kopiere.

Das sagt mir, dass ihr ein Codierungsproblem ist. Löschen Sie diese Formatierung und sehen Sie, ob Ihnen das hilft.

Sowohl $ne als auch $nin sollten funktionieren!