mongodb findAll有2个参数彼此相等

时间:2014-04-22 14:56:52

标签: mongodb

如何将此sql查询翻译为mongodb

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

我试过这个

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

但没有快乐......

1 个答案:

答案 0 :(得分: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 } } ])