2016-06-24 9 views
0

Ich möchte Sequelize, um mir alle Werte zurückzugeben, die IDs nicht in einem Array sind.

Sequelize gibt nichts zurück, wenn Wert für $ notIn ein leeres Array ist, aber es gibt mich zurück, wenn Array einen leeren Wert enthält.

Das gibt mir nichts:

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

Das gibt mir jeden Wert:

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

Wie kommt es nicht alle Werte zurückgibt, wenn das Array leer ist? Wenn es leer ist, bedeutet dies, dass alle Werte, deren Werte nicht in diesem Array sind, zurückgegeben werden sollen. Da die ID keinen Wert enthält, sollte Sequelize mir alle Werte zurückgeben, oder?

Antwort

3

Dieses Problem wird in der Sequelize-Version 4 behoben. Diese Version wurde jedoch noch nicht vollständig veröffentlicht. Zumindest gibt es noch keine Dokumentation.

Siehe das GitHub-Problem bei https://github.com/sequelize/sequelize/issues/4859.

Das Änderungsprotokoll finden Sie unter https://github.com/sequelize/sequelize/blob/master/changelog.md. Es sagt

[FIXED] $ Notin: [] jetzt NICHT IN (NULL) # 4859

Vielleicht umgewandelt wird können Sie sich diejenigen, Version 4 Änderungen in Ihrem aktuellen Code implementieren.

+0

Ja, und ich schon. Es war nur irgendwie komisch und ich wollte wissen warum. Danke für die Links. – thadeuszlay

0

Für diejenigen mit < 4-Version, hier eine Arbeit um I verwendet,

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 
    } 
    } 
}); 

Hoffe, es hilft !!

Verwandte Themen