mongodb中随机获取1条记录的实现方法
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条记录的实现方法
相关文章
- Mongodb实现的关联表查询功能【population方法】
- mongodb错误tcmalloc: large alloc out of memory, printing stack and exiting解决办法
- 的MongoDB时代:能源革命(mongodb绿色)
- 深入浅出MongoDB:学习使用它的方法(mongodb使用方法)
- 数据MongoDB实现高效轻松存储大小数据(mongodb存储大小)
- 学会使用MongoDB连接器,实现数据库高效率访问(mongodb连接器)
- 简易教程:MongoDB环境快速搭建(mongodb环境配置)
- MongoDB: 适合应用于何种场景?(mongodb适用场景)
- 用MongoDB实现表的复制(mongodb复制表)
- MongoDB:统计查询结果数量(mongodb查询数量)
- MongoDB实现文件上传下载功能(mongodb上传下载)
- MongoDB查询子文档的技巧(mongodb查询子文档)
- MongoDB极速合并数据实现快速分析(mongodb数据合并)
- 优化MongoDB,提升数据库性能(mongodb优化方案)
- 关闭MongoDB数据库连接:安全的停止方法(mongodb关闭连接)
- 处理利用MongoDB加速实现大数据处理(mongodb大数据)
- Mongodb联查:实现数据之间的自动化关联(mongodb联查)
- 备份MongoDB文件备份:保证数据安全的关键步骤(mongodb文件)
- 高效管理大量数据:掌握Mongodb批量写入技巧(mongodb批量写入)
- 教学MongoDB开发:视频教学指南(mongodb开发视频)
- 均衡MongoDB实现负载均衡的实践(mongodb负载)
- Mongodb大小写敏感性:为什么要区分大小写?(mongodb区分大小写)
- MongoDB数据安全:保护隐私加密数据(mongodb数据加密)
- 一切均在MongoDB:超越视野的全面集合(mongodb 所有集合)