zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mongodb中随机获取1条记录的实现方法

MongoDB方法 实现 获取 记录 随机
2023-06-13 09:19:49 时间

  2.随机获取偏移量为0~总记录数-1

 3.查询时skip偏移量,再获取1条记录

因本人测试环境php已升级到7.0以上,mongodb扩展使用支持php7.0以上的扩展,很多方法与php5.6不同。因此代码必须在php7.0以上运行。如果是php5.6环境,需要修改代码才能运行。

代码如下:

function.php


// 连接mongodb

function conn($host, $user, $passwd){

 $server = "mongodb://".$user.":".$passwd."@".$host;

 try{

 $conn = new MongoDB\Driver\Manager();

 } catch (MongoDB\Driver\Exception\ConnectionException $e){

 throw new ErrorException("Unable to connect to db server. Error:" . $e- getMessage(), 31);

 return $conn;

// 插入数据

function add($conn, $dbname, $collname, $data, $index){

 // 创建索引

 $cmd = array(

 "createIndexes" = $collname,

 "indexes" = array(

 array(

 "name" = "index",

 "key" = $index,

 "ns" = $dbname.".".$collname

 $command = new MongoDB\Driver\Command($cmd);

 $conn- executeCommand($dbname, $command);

 // 插入数据

 $bulk = new MongoDB\Driver\BulkWrite();

 $inserted = 0;

 if($data){

 foreach($data as $k= $v){

 $bulk- insert($v);

 $result = $conn- executeBulkWrite($dbname.".".$collname, $bulk);

 $inserted = $result- getInsertedCount();

 return $inserted;

// 获取总记录数

function getCount($conn, $dbname, $collname){

 $cmd = array(

 "count" = $collname,

 "query" = array()

 $command = new MongoDB\Driver\Command($cmd);

 $result = $conn- executeCommand($dbname, $command);

 $response = current($result- toArray());

 if($response- ok==1){

 return $response- 

 return 0;

// 随机获取一条记录

function randOne($conn, $dbname, $collname){

 // 总记录数

 $total = getCount($conn, $dbname, $collname);

 // 随机偏移

 $skip = mt_rand(0, $total-1);

 $filter = array();

 $options = array("skip"= $skip, "limit"= 

 $query = new MongoDB\Driver\Query($filter, $options);

 $cursor = $conn- executeQuery($dbname.".".$collname, $query);

 $result = array();

 if($cursor){

 foreach($cursor as $v){

 $v = objectToArray($v);

 unset($v["_id"]);

 $result[] = $v;

 return $result $result[0] : $result;

// 对象转为数组

function objectToArray($obj){

 $arr = is_object($obj) get_object_vars($obj) : $obj;

 if(is_array($arr)){

 return array_map(__FUNCTION__, $arr);

 }else{

 return $arr;

 

demo.php


require("function.php");

// 连接mongodb

$conn = conn("localhost","testdb","root","123456");

// 插入50条数据记录

$data = array();

// 索引

$index = array("user"= true);

for($i=0; $i $i++){

 $data[] = array(

 "user" = "test_user_".str_pad($i, 4, "0", STR_PAD_LEFT)

$inserted = add($conn, "testdb", "user", $data, $index);

echo "成功插入".$inserted."条测试记录数 br br 

// 随机获取一条记录,抽5次

echo "随机获取一条记录,抽5次 br 

$result = array();

for($i=0; $i $i++){

 $result[] = randOne($conn, "testdb", "user");

echo " pre 

print_r($result);

echo " /pre 

 

输出:

成功插入50条测试记录数

随机获取一条记录,抽5次

Array
(
[0] = Array
(
[user] = test_user_0017
)

[1] = Array
(
[user] = test_user_0026
)

[2] = Array
(
[user] = test_user_0004
)

[3] = Array
(
[user] = test_user_0043
)

[4] = Array
(
[user] = test_user_0023
)

测试php代码,首先需要在mongodb创建testdb及创建用户和执行auth。

方法如下:


use testdb

db.createUser( 

 "user":"root", 

 "pwd":"123456", 

 "roles":[{"role" : "readWrite", "db":"testdb"}] 

db.auth( 

 "user":"root", 

 "pwd":"123456" 

) 

本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 mongodb中随机获取1条记录的实现方法