2016-06-24 3 views
0

Я хочу, чтобы Sequelize возвращал мне все значения, идентификаторы которых не находятся в массиве.

Sequelize ничего не возвращает, если значение для $ notIn является пустым массивом, но возвращает его, если массив содержит пустое значение.

Это возвращает мне ничего:

db.foo.findAll({ 
    where: { 
     id: { 
     $notIn: [] 
     } 
    } 
    }); 

Это возвращает меня каждое значение:

db.foo.findAll({ 
    where: { 
     id: { 
     $notIn: [''] 
     } 
    } 
    }); 

Как же он не возвращает все значения, если массив пуст? Если он пуст, то это означает, что все значения, значения которых не находятся в этом массиве, должны быть возвращены. Поскольку идентификатор не содержит никакого значения, sequelize должен возвращать мне все значения, не так ли?

ответ

3

Эта проблема будет исправлена ​​в версии Sequelize 4. Однако эта версия еще не раскрыта. По крайней мере, пока нет документации.

См. Вопрос GitHub по адресу https://github.com/sequelize/sequelize/issues/4859.

Перечень изменений можно найти по адресу: https://github.com/sequelize/sequelize/blob/master/changelog.md. Это говорит

[FIXED] $ notIn: [] теперь преобразуется в NOT IN (NULL) # 4859

Может быть, вы можете реализовать эти версии 4 изменения в текущем коде самостоятельно.

+0

Да, и я уже это сделал. Это было просто странно, и я хотел знать, почему. Спасибо за ссылки. – thadeuszlay

0

Для тех, кто использует < 4 версию, здесь работа вокруг я использовала,

let idsToSkip = [...]; //generate array of ids, this may result in empty array 
idsToSkip.push('-1'); // push a value that can not be the id in table. this will generate `not in ('-1')` query serving the purpose. 
db.foo.findAll({ 
    where: { 
    id: { 
     $notIn: idsToSkip 
    } 
    } 
}); 

Надеется, что это помогает !!