2017-01-18 156 views
0

的奇怪行爲我有我的MongoDB數據庫這兩個文件:的MongoDB - 查詢

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" : [ ] 
} 

我有這樣的代碼,以獲得查詢量:

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

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

量爲2這種情況下,什麼是錯的 - 它應該是1 在查詢對象的查詢看起來是這樣的:

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

如果我複製此查詢,並提出了這樣的MongoDB的控制檯查詢:

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

我得到兩個,如果錯了,因爲一個文檔包括userIdBlackList 587f39910cc0fec092bdb10a什麼量 - >它應該是一個。

與此查詢命令:

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

我得到正確的結果,我真的很困惑的時刻。 有沒有人有任何想法? 也許問題是一次userIdBlackList用引號(「userIdBlackList」)和其他時間不是。

+0

你在mongoIds存儲在userIdBlackList數組字段?或者字符串? –

+0

字符串,用戶字符串字符串 – quma

+0

這真的很瘋狂,我用用戶字符串,它不工作,比用戶對象@DBRef,不工作,現在ObjectId的,仍然不工作。其實它不清楚爲什麼這使得Spring Data和MongoDB產生這樣的問題 – quma

回答

0

我認爲問題是無意識格式化爲"userIdBlackList"。對於您的所有搜索查詢,您的字符串在"??userIdBlackList"中用非打印字符解釋。當我將查詢複製到mongo shell時,我會看到小小的透明方框。

這告訴我他們是一些編碼問題。清除該格式並查看是否可以幫助您。

$ne$nin都應該工作!