2017-01-18 177 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都应该工作!