2014-06-27 61 views
1

我正在使用mongodb和sails.js查詢包含種子文件標題的模型。但我無法使用「AND」條件執行水線查詢。我已經嘗試了幾種方式,但其中大部分都返回空或簡單地返回。Waterline(Sails.js):AND條件

例如該數據庫包含與一個條目: "title": "300 Rise Of An Empire 2014 720p BluRay x264-BLOW [Subs Spanish Latino] mkv"

在添加由線中的每個查詢參數行:

var query = Hash.find(); 
query = query.where({ "title": { "contains": "spanish" } }); 
query = query.where({ "title": { "contains": "2014" } }); 
query = query.where({"or": [ { "title": { "contains": "720p" } }, { "title": { "contains": "1080p" } } ] }); 

它返回包含「2014」 AND(「720P」 OR「1080」)的條目,它們中的一些還包含「西班牙文」,但我認爲這只是一個巧合。

如何指定 「西班牙」 和 「2014」 AND( 「720P」 或「1080P)

感謝

回答

3

有一個解決方案,但這真是一個蒙戈之一:?

query = query.where({"$and": [ { "title": { "contains": "720p" } }, { "title": { "contains": "1080p" } } ] }); 

通知的$and關鍵

從帆 - 蒙戈來源:

/** 
* 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 {*} 
*/ 
1

使用此?!

var query = { 
    title: [ 
    { contains: "spanish"}, 
    {contains: "2014"} 
    ], 
    or: [ 
    {title: { contains: "720p" } }, 
    {title: { contains: "1080p" } }, 
    ] 
}; 

Model.find(query).exec(function(err,items) { 
    .... 
}); 
+1

謝謝你,但它不工作,返回一個空集。 – Theadd

+0

顯示數據庫 – mdunisch

+0

對不起,我沒有注意到。你可以在我的第一篇文章[這裏](http://37.187.9.5:1337/hash/search?query=spanish)中使用該方法查看數據庫查詢的結果。他們被截斷。只需編輯url中的「查詢」參數即可搜索不同的術語。你也可以使用'2014西班牙語720p | 1080p「作爲參數,[鏈接](http://37.187.9.5:1337/hash/search?query=1024%20spanish%20720p%20|%201080p),[樣本輸出](http://pastebin.com/ est2YbCN)。 – Theadd