激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - mongodb中隨機獲取1條記錄的實現方法

mongodb中隨機獲取1條記錄的實現方法

2020-05-07 16:01傲雪星楓 MongoDB

這篇文章運用實例給大家演示了如何在mongodb中隨機獲取1條記錄,文中介紹的很詳細,有需要的朋友們可以參考借鑒。下面來一起看看吧。

實現原理如下

    1.先查詢表中的記錄總數

    2.隨機獲取偏移量為0~總記錄數-1

    3.查詢時skip偏移量,再獲取1條記錄

因本人測試環境php已升級到7.0以上,mongodb擴展使用支持php7.0以上的擴展,很多方法與php5.6不同。因此代碼必須在php7.0以上運行。如果是php5.6環境,需要修改代碼才能運行。

代碼如下:

function.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?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->n;
 }
 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'=>1);
 $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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
require('function.php');
 
// 連接mongodb
$conn = conn('localhost','testdb','root','123456');
 
// 插入50條數據記錄
$data = array();
 
// 索引
$index = array('user'=>true);
 
for($i=0; $i<50; $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<5; $i++){
 $result[] = randOne($conn, 'testdb', 'user');
}
 
echo '<pre>';
print_r($result);
echo '</pre>';
?>

輸出:

成功插入50條測試記錄數

隨機獲取一條記錄,抽5次

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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

方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use testdb
 
db.createUser(
 {
  "user":"root",
  "pwd":"123456",
  "roles":[{"role" : "readWrite", "db":"testdb"}]
 }
)
 
db.auth(
 {
  "user":"root",
  "pwd":"123456"
 }
)

總結

以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能有所幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
主站蜘蛛池模板: 欧美中文字幕一区二区 | 欧美色爱综合 | 成年人在线视频免费 | 久久精品一级 | 久综合| 久久草在线视频 | 特级西西444www大精品视频免费看 | 久久精品日产高清版的功能介绍 | 91aa.app | 深夜视频在线观看 | 免费国产在线精品 | 国产亲子伦在线观看 | 国产精品麻豆一区二区三区 | 护士hd欧美free性xxxx | 2019天天干夜夜操 | 国产精品久久久久久久久久大牛 | 国产99久久| 亚洲成人国产 | 成人午夜视频网站 | 久久久久久久爱 | 在线观看日韩中文字幕 | 夜夜b| 成人福利电影在线观看 | 99成人精品视频 | 欧美黄色片免费看 | 国产精品自拍99 | 亚洲男人一区 | 国产在线观看一区二区三区 | 国产日韩a| 北原夏美av| 国产 视频 一区二区 | 91丝袜| 欧美一级α| 91精品国产免费久久 | 国产一级性生活视频 | 久久污 | 免费看一级视频 | 成人艳情一二三区 | 国产成人免费高清激情视频 | 黄色网址电影 | 久久久婷婷|