2014-04-22 34 views
0

如何翻譯這個SQL查詢的MongoDB的MongoDB的findAll有兩個參數彼此相等

Select * From Users Where type = "S" and registration_token = username; 

我已經試過這

$users = User::model()->findAll(array(
    "type" => "S", 
    "registration_token" => "username" 
)); 

,但沒有喜悅......

回答

1

這是一個關係查詢,所以請記住,MongoDB不適合像SQL這樣的操作。這種類型的查詢通常會比在SQL數據庫中慢得多。我還會考慮這種類型的'元邏輯'壞設計,因爲兩個看似獨立的值匹配的事實不應該是任何意義。

這就是說,你仍然有兩個選擇。您可以使用基於JavaScript $where

db.coll.find({$and : [ 
{"type" : "S"}, 
{"$where": function() { return this.registration_token === this.username; } }]}) 

然而,這種方法是,因爲它需要火了JavaScript的每個對象發現(即所有那些具有type == 'S')。如果$where中的任何數據來自最終用戶,它可能也會有安全隱患。

或者,你可以使用aggregation pipeline

> db.coll.aggregate([{ "$project": { 
    "username": "$username", 
    "type": "$type", 
    "registration_token" : "$registration_token", 
    "match": { "$eq": ["$username","$registration_token"]} }}, 
    { "$match": { "match": true } } ])