php操作mongoDB数据库查询的时候怎样写“或”这样的多个条件查询代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php操作mongoDB数据库查询的时候怎样写“或”这样的多个条件查询代码?相关的知识,希望对你有一定的参考价值。

我正在用php做一个网站,其中有一个在线聊天页面,我需要从mongoDB数据库中查询出发送信息者和接收信息者双方的聊天内容,比如张三和李四聊天,需要查询出张三发送给李四的聊天内容和李四发送给张三的聊天内容,这个查询条件怎么写呢?我把聊天内容插入数据库用的是这样的语句:
$collection = $db->dialogs;
$arr = array("发送者"=>$_SESSION[nick],"发送内容"=>$_GET["sendcontent"],"发送对象"=>$_GET["sendto"],"发送时间"=>$_GET["sendtime"],"发送ip"=>$_GET["sendip"],"会话id"=>$_GET["sessionid"]);
$result = $collection->insert($arr);
我需要查出发送者是张三而发送对象是李四,或者 发送者是李四而发送对象是张三的内容,查询条件怎么写?谢谢!

据我所知,目前mongoDB没有“或”这个东西

但我刚才在网上查了下
发现了下面的信息,你参考下吧

在mongodb中有$or 操作符的,官网中给出的例子如下:

Simple:

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

With another field

db.foo.find( name : "bob" , $or : [ a : 1 , b : 2 ] )

The $or operator retrieves matches for each or clause individually and eliminates duplicates when returning results. A number of $or optimizations are planned for 1.8. See this thread for details.
$or cannot be nested.追问

谢谢你!我用这样的语句已经查到了想查的结果:$query = array('$or'=>array(array("发送者"=>$_SESSION[nick],"发送对象"=>$_GET["sendto"]),array("发送者"=>$_GET["sendto"],"发送对象"=>$_SESSION[nick])));
$cursor = $collection->find($query);

参考技术A 直接在这个大叔组中push数据啊,追问

你可能没弄明白,我现在要从数据库中把早先插入的数据查出来

参考技术B $where['$or'] = [
           ['id' => ['lt'=>0]],
           ['id2' => ['lt'=>1]]
         ];

用PHP查询mongo数据时,条件是某个字段(A为数组)不为空,但是有的记录中并没有字段A,这个条件怎么写?

类似这样$collection->find(array('_id'=>array('<>'=>''))),这个是查_id不为空的,_id是每条记录中都存在的字段。mongoDB有$exists方法可以判断某个字段是否存在,但是PHP的写法是什么?

参考技术A $collection->find(array('字段名' => array('$exists' => 1)))本回答被提问者采纳 参考技术B $sql = "SELECT * FROM XX ";
$result = mysql_query($sql);
$res = mysql_fetch_array($result,MYSQL_ASSOC);
$bool = array_key_exists('需要查找的字段名',$res);

$bool 为真说明有这个字段

以上是关于php操作mongoDB数据库查询的时候怎样写“或”这样的多个条件查询代码?的主要内容,如果未能解决你的问题,请参考以下文章

php mongo条件有and和or时应该怎样写

MongoDB高级操作

我怎样才能用 mongodb 编写这个查询? [复制]

PHP7操作MongoDB

mongodb查询操作分析

用PHP查询mongo数据时,条件是某个字段(A为数组)不为空,但是有的记录中并没有字段A,这个条件怎么写?