2013-12-20 45 views
25

通過這樣Sequelize OR條件對象

var condition= 
{ 
    where: 
    { 
    LastName:"Doe", 
    FirstName:["John","Jane"], 
    Age:{ 
     gt:18 
    } 
    }  
} 

創建對象,並傳遞它

Student.findAll(condition) 
.success(function(students){ 

}) 

這可能精美產生這樣的SQL

"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18" 

然而,這是所有「 AND'條件,如何通過創建條件對象來生成'OR'條件?

回答

33

似乎還有另一種格式現在

where: { 
    LastName: "Doe", 
    $or: [ 
     { 
      FirstName: 
      { 
       $eq: "John" 
      } 
     }, 
     { 
      FirstName: 
      { 
       $eq: "Jane" 
      } 
     }, 
     { 
      Age: 
      { 
       $gt: 18 
      } 
     } 
    ] 
} 

會產生

WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18) 

看到該文檔:http://docs.sequelizejs.com/en/latest/docs/querying/#where

+0

這應該是'$或:{...}'。注意,''''''''應該變成'{'和'} – briangonzalez

+1

你們都不正確,請參閱我的答案以獲得正確的語法。 –

+0

我喜歡這種方式之前和/或功能的方式@evanhadfield建議,因爲它更整潔。 – mraxus

18

使用Sequelize.or

var condition = { 
    where: Sequelize.and(
    { name: 'a project' }, 
    Sequelize.or(
     { id: [1,2,3] }, 
     { id: { lt: 10 } } 
    ) 
) 
}; 

Reference(搜索Sequelize.or

編輯:此外,這已被修改,最新的方法見Morio's answer

+2

這個環節不工作 –

+0

@SunilSharma,請檢查更新的答案。 –

11

docs about querying

這將是:

$or: [{a: 5}, {a: 6}] // (a = 5 OR a = 6) 
+0

與sequ​​alize 3一起工作!謝謝! –

2

基於字符串的運營商將在未來(你可能已經看到在控制檯的警告)被棄用。

使用符號運算符來處理這個問題對我來說是相當混亂的,我已經用兩個例子更新了docs

Post.findAll({ 
    where: { 
    [Op.or]: [{authorId: 12}, {authorId: 13}] 
    } 
}); 
// SELECT * FROM post WHERE authorId = 12 OR authorId = 13; 

Post.findAll({ 
    where: { 
    authorId: { 
     [Op.or]: [12, 13] 
    } 
    } 
}); 
// SELECT * FROM post WHERE authorId = 12 OR authorId = 13;