一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術|

服務器之家 - 數(shù)據(jù)庫 - MongoDB - mongodb中隨機獲取1條記錄的實現(xiàn)方法

mongodb中隨機獲取1條記錄的實現(xiàn)方法

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

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

實現(xiàn)原理如下

    1.先查詢表中的記錄總數(shù)

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

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

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

代碼如下:

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;
}
 
// 插入數(shù)據(jù)
function add($conn, $dbname, $collname, $data, $index){
 
 // 創(chuàng)建索引
 $cmd = array(
  'createIndexes' => $collname,
  'indexes' => array(
   array(
    'name' => 'index',
    'key' => $index,
    'ns' => $dbname.'.'.$collname
   )
  )
 );
 $command = new MongoDB\Driver\Command($cmd);
 $conn->executeCommand($dbname, $command);
 
 // 插入數(shù)據(jù)
 $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;
}
 
// 獲取總記錄數(shù)
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){
 
 // 總記錄數(shù)
 $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;
}
 
// 對象轉為數(shù)組
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條數(shù)據(jù)記錄
$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.'條測試記錄數(shù)<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條測試記錄數(shù)

隨機獲取一條記錄,抽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創(chuàng)建testdb及創(chuàng)建用戶和執(zhí)行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數(shù)據(jù)到MongoDb的方法

    遷移sqlserver數(shù)據(jù)到MongoDb的方法

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

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

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

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

    MongoDB教程網(wǎng)6982020-04-24
  • MongoDB分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題

    分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題

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

    Linux-18743072020-12-20
  • MongoDBMongoDB憑什么躋身數(shù)據(jù)庫排行前五

    MongoDB憑什么躋身數(shù)據(jù)庫排行前五

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

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

    MongoDB 內存使用情況分析

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

    MongoDB教程網(wǎng)10002020-09-29
  • MongoDBMongodb實現(xiàn)定時備份與恢復的方法教程

    Mongodb實現(xiàn)定時備份與恢復的方法教程

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

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

    mongodb基本命令實例小結

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

    dawn-liu3652020-05-26
主站蜘蛛池模板: 五月激激激综合网色播免费 | 韩国久久精品 | 欧美精品一区二区三区免费观看 | 成人国产精品 | 波多野结衣女教师在线观看 | 变态 调教 视频 国产九色 | 久久re热在线视频精6 | caoporm国产精品视频免费 | 欧美聚众性派对hdsex | 国产成人在线免费视频 | 91麻豆国产福利精品 | 亚洲乱码一二三四区国产 | 精品国产精品国产偷麻豆 | 美女被视频网站看免费入口 | 男人操男人 | 精品淑女少妇AV久久免费 | 欧美日韩国产亚洲人成 | 亚洲一二三区视频 | 九九热国产视频 | 五月桃花网婷婷亚洲综合 | 美女胸又大又黄又www小说 | 91精品国产免费久久国语蜜臀 | 色老板美国在线观看 | 91亚洲视频在线观看 | 日韩色在线观看 | 99re8在这里只有精品23 | 亚洲aⅴ男人的天堂在线观看 | 舔穴吸奶| 国产精品视频1区 | 国产精品xxxav免费视频 | 欧美精品一二三区 | 国产精品九九免费视频 | 猫咪社区免费资源在线观看 | 精品国产中文字幕在线视频 | www视频免费看 | 邪恶肉肉全彩色无遮盖 | 91色视 | 亚洲黄视频在线观看 | 国产成人精品第一区二区 | 亚洲国产第一 | 美女大逼逼 |