2014-11-09 61 views
3

我的問題與Waterline (Sails.js): AND conditions相同。有一個答案,但它不適合我(對提問者而言)。Waterline/Sails.js/Mongo如何使用AND條件查詢一個字段?

據我所知,waterline在其查詢語言中沒有關鍵字'和'。 如果我有多個條件進行查詢,我可以簡單地使用:

MyModel.find({fieldA:valueA, filedB:valueB}); 

但我的問題是怎麼做的:

MyModel.find({fieldA:{ 
    contains:keyword1, 
    contains:keyword2 
}}); 

因爲我不能設置在對象的兩個關鍵同名/ JSON,所以我嘗試:

MyModel.find({fieldA: 
    [ 
    {contains:keyword1}, 
    {contains:keyword2} 
    ] 
}); 

MyModel.find({fieldA: 
    {contains:[keyword1,keyword2]} 
}); 

MyModel.find() 
.where({fieldA:{contains:keyword1}) 
.where({fieldA:{contains:keyword2}}); 

但他們沒有按預期工作:第一和第二返回一個空集和第3只一個包含關鍵字2。 看來,當你試圖將兩個'contains'條件添加到同一個字段(fieldA),並且鏈接'where'方法時,第二個會覆蓋第一個。

我正在使用本地mongoDB的方式來處理這個作爲一種解決方法,劑量任何人都知道如何以水線的方式做到這一點?或者這是一個問題應該在github上報告。

PS:對不起,我英文不好:P

回答

4

要回答你的問題,多contains不被支持。無論是遺漏還是功能要求都值得商榷。至少有一個SQL的情況下,這是一個愚蠢的簡單的修復(儘管我花了一個小時才找到它),以能夠支持類似:

orm.collections.user.find({ 
      and: [ 
       { name: { contains: 'neil' } }, 
       { name: { contains: 'armstrong' } } 
      ] 
     }); 

它所需要的是在以下文件case 'and':和它的工作原理:

https://github.com/balderdashy/waterline-sequel/blob/master/sequel/lib/criteriaProcessor.js#L120

我懷疑蒙戈情況是相似的。

+0

感謝您的回覆,你的時間! :)所以我應該在github上報告這個錯誤(或發送功能請求)? – 2014-11-10 11:12:02

+0

可以在mongo上做這項工作...不知道我是否做錯了什麼,或者水線是否遠遠落後 – 2015-10-15 09:40:11

+0

它的確行得通!看到我的答案!使用$而不是和mongo – 2015-10-15 09:58:07

4

那麼我發現它應該爲mongo數據庫完成的方式。

您應該能夠使用$and鍵在同一領域的多個指標分析相結合:

orm.collections.user.find({ 
     $and: [ 
      { name: { contains: 'neil' } }, 
      { name: { contains: 'armstrong' } } 
     ] 
    }); 

帆 - 蒙戈源代碼顯示了這一點:

/** 
* Parse Clause 
* 
* <clause> ::= { <clause-pair>, ... } 
* 
* <clause-pair> ::= <field> : <expression> 
*     | or|$or: [<clause>, ...] 
*     | $or : [<clause>, ...] 
*     | $and : [<clause>, ...] 
*     | $nor : [<clause>, ...] 
*     | like : { <field>: <expression>, ... } 
* 
* @api private 
* 
* @param original 
* @returns {*} 
*/ 
相關問題