MongoDB - 查询的奇怪行为

时间:2017-01-18 09:53:19

标签: java mongodb mongodb-query

我在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对象中的查询如下所示:

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

如果我复制此查询并对mongodb控制台进行查询,请执行以下操作:

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

我得到两个,如果错误,因为一个文档包含userIdBlackList中的 587f39910cc0fec092bdb10a - >它应该是一个。

使用此查询命令:

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

我得到了正确的结果,此刻我真的很困惑。 有谁有想法吗? 也许问题是,有一次 userIdBlackList 带引号(“userIdBlackList”),而另一次则不是。

1 个答案:

答案 0 :(得分:0)

我认为问题在于为"userIdBlackList"选择了无意的格式。对于所有搜索查询,您的字符串在"??userIdBlackList"中使用非打印字符进行解释。当我将你的查询复制到mongo shell时,我看到一些透明的方框。

这告诉我他们是一些编码问题。清除格式并查看是否对您有所帮助。

$ne$nin都应该有效!