2017-01-18 3 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() 

я получаю сумму двух, что, если не так, потому что один документ включает в себя 587f39910cc0fec092bdb10a в userIdBlackList -> он должен быть один.

С помощью этой команды запроса:

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

я получить правильный результат, я действительно путают в данный момент. Есть ли у кого-нибудь идеи? Возможно, проблема в том, что один раз userIdBlackList с кавычкой («userIdBlackList»), а в другой раз это не так.

+0

Вы храните mongoIds в поле массива userIdBlackList? Или строка? –

+0

Строки, идентификационные строки uf пользователей – quma

+0

Это действительно сумасшедший, я использовал пользовательские строки, его не работает, чем @DBRef для User Object, а не работает, теперь ObjectId's, все еще не работает. На самом деле мне непонятно, почему это делает такие проблы с данными Spring и MongoDB. – quma

ответ

0

Я думаю, проблема связана с непреднамеренным форматированием, полученным для "userIdBlackList". Ваша строка интерпретируется с непечатаемыми символами в "??userIdBlackList" для всех ваших поисковых запросов. Я вижу небольшие прозрачные квадратные квадратики, когда я копирую ваши запросы в оболочку mongo.

Это говорит о том, что у них есть проблема с кодировкой. Удалите это форматирование и посмотрите, поможет ли это вам.

Оба $ne и $nin должны работать!

Смежные вопросы