1

我有一个关于网站访问者信息的集合,每个访问者都有关于他们的各种信息,包括销售人员是否“锁定”了他们。目前我有以下代码:

$db = $conn->Surreal;
$collection = $db->visitors;
$criteria = array(
    'locked_by' => $_REQUEST['ownerkey'],
);
$criteriat = array(
    'locked_by' => null,
);
$cursor = $collection->find($criteria);
$cursort = $collection->find($criteriat);
//echo $doc->count() . ' document(s) found. <br/>';
foreach ($cursor as $doc) {
    //List all  
    if($doc['locked_by'] ==null) $doc['locked_by'] = " ";
    $pieces = explode("&&", $doc['location']);
    echo('Surreal - '.$doc['name'].'//'.$doc['uuid'].'//'.$doc['uuid'].'//'.$doc['locked_by'].'//'.$doc['location'].'*');       
}
foreach ($cursort as $doc) {
    //List all  
    if($doc['locked_by'] ==null) $doc['locked_by'] = " ";
    $pieces = explode("&&", $doc['location']);
    echo('Surreal - '.$doc['name'].'//'.$doc['uuid'].'//'.$doc['uuid'].'//'.$doc['locked_by'].'//'.$doc['location'].'*');       
}

基本上使用两个 foreach 语句来回显信息。我可以以某种方式改为使用查询来基本说

if(locked_by == "RANDOM" || locked_by == null) 

?

4

2 回答 2

1

嗯,MongoDB在查询中支持OR条件,从1.5.3版本开始:

db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )

...所以它应该通过这样的方式实现:

$criteria = array(
    '$or' => array(array('locked_by' => 'RANDOM'), array('locked_by' => null))
);

问题是您使用的驱动程序是否支持此类查询。我在使用这种特殊类型时遇到了一些困难,但那是一年前的事了。我想事情可能会变得最好。)

更新:至少在评论中有一个类似的查询,所以我猜事情确实改变了最好的。)

于 2012-06-20T22:55:11.683 回答
0

raina77ow 的回答应该足够了,但我总是发现以下页面对于确定 or 语句和大于等所需的内容很有用。

MongoDB 运算符

出于 PHP 的目的,您需要将其更改为数组形式,但语法相似并且是一个很好的参考。

于 2013-05-29T12:09:02.690 回答