【发布时间】:2013-07-10 16:43:38
【问题描述】:
我有一个如下所示的帐户文档:
_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);
谢谢大家。
【问题讨论】:
-
你的$nin 错了,应该是
field => array($nin) -
谢谢,我稍微修改了一下,但仍然希望有人能参与说明这个查询是如何编写的。
-
基本上:$and( $or(email & altemail.email), $ne(_id))?
-
就像现在一样,如果您更正 $nin 它应该可以正常工作,尽管正如@WiredPrairie 所说,$ne 实际上可能更好
-
@WiredPrairie 这就是你的建议吗?
$db->users->find('$and' => array( '$or' => array(array('email'=>$email),array('altemail.email'=>$email)), '_id' => array('$ne' => $myID) ));
标签: mongodb mongodb-php