我有一个如下所示的帐户文档:
_id: ###
email: string
password: md5(string)
altemail: [{ email: string
verified: time},
{ email: string
verified: time},
{ ... }]
我想在允许用户创建帐户之前检查唯一的电子邮件。但是,我还想允许当前用户_id的保存。
我的直觉是使用:
$db->users->find(array(
'$or' => array(array("email" => $email),
array("altemail.email" => $email))
'_id' => array('$nin' => array($myID))
));
但这不适合我。 有人可以告诉我如何设置一个大致相当于mysql的查询:
SELECT *, count(_id) FROM users WHERE (email = $email OR altemail.email = $email) AND (_id != $myID);
谢谢你们。
答案 0 :(得分:1)
您可以使用$ne
运算符代替$ nin,因此您的查询将如下所示:
{
"$or": [
{
"email": "test@test.com"
},
{
"altemail.email": "test@test.com"
}
],
"_id": {
$ne: "123456"
}
}
php代码将是:
$db->users->find(array(
'$or' => array(
array("email" => $email),
array("altemail.email" => $email)
),
'_id' => array('$ne' => $myID)
));
答案 1 :(得分:0)
优秀! 谢谢所有帮助过的人。 Miguel的代码简洁,准确,非常优雅。 以下是对我之后提出这个问题的人的最终解释:
$email = "name@domain.com"; //example email
$myID = new MongoId("51dc6628e8602982ae33ef77"); //example id
$db->users->find(array(
'$or' => array(
array("email" => $email),
array("altemail.email" => $email)
),
'_id' => array('$ne' => $myID)
));
此查询将:
再次感谢大家。