如何将此sql查询翻译为mongodb
Select * From Users Where type = "S" and registration_token = username;
我试过这个
$users = User::model()->findAll(array(
"type" => "S",
"registration_token" => "username"
));
但没有快乐......
答案 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 } } ])