關於phpmongodbinsert的信息

本文目錄一覽:

mongodb 3.2怎麼在php中連接

表標PHP已經自帶了mongo功能,你就可以操作下面的代碼(但是你必須有安裝mongodb服務器)

一、連接數據庫

使用下面的代碼創建一個數據庫鏈接

複製代碼 代碼如下:

?php

$connection = new Mongo(mongodb://192.168.1.5:27017); //鏈接到 192.168.1.5:27017//27017端口是默認的。

$connection = new Mongo( “example.com” ); //鏈接到遠程主機(默認端口)

$connection = new Mongo( “example.com:65432” ); //鏈接到遠程主機的自定義的端口

print_r($connection-listDBs());//能打印出數據庫數組,看看有幾個數據庫。

?

如圖:

上圖說有一個數據庫名字叫local,總大小1個字節,他是空的。看見ok表示運行成功。

現在你可以使用$connection鏈接來操作數據庫了

選擇數據庫

使用下面的代碼來選擇一個數據庫

複製代碼 代碼如下:

?php

$db = $connection-dbname;

?

這裡的數據庫並不一定是一個已經存在的數據庫,如果所選擇的數據庫不存在,則會新建一個數據庫,所以在選擇數據庫的時候,注意一定要填上正確的數據庫名

如果拼寫錯誤的話,很有可能會新建一個數據庫

複製代碼 代碼如下:

?php

$db = $connection-mybiglongdbname;

//做一些事情

$db = $connection-mybiglongdbnme;

//現在會連上一個新的數據庫

?

獲取一個集合

獲取一個集合跟選擇數據庫擁有相同的語法格式

複製代碼 代碼如下:

?php

$db = $connection-baz;//選擇數據庫

$collection = $db-foobar;//選擇foobar集合

//或者使用更簡潔的方式

$collection = $connection-baz-foobar;

?

插入一個文檔

多維數組是可以被儲存到數據庫中的基本單元

一個隨機的文檔可能是這樣

複製代碼 代碼如下:

?php

$doc = array(

”name” = “MongoDB”,

“type” = “database”,

“count” = 1,

“info” = (object)array( “x” = 203,

“y” = 102),

“versions” = array(“0.9.7″, “0.9.8″, “0.9.9″)

);

?

注意:你可以嵌套數組與對象,對象與文檔在mongodb中幾乎是一樣的,你可以使用$doc調用一個文檔或對象,但是info字段總是一個對象而不是一個文檔,

本約束適用於所有文檔

使用MongoCollection::insert()插入一個文檔

複製代碼 代碼如下:

?php

$m = new Mongo();

$collection = $m-foo-bar;

$collection-insert($doc);

?

mongodb 的 insert()、save() ,區別主要是:若存在主鍵,insert() 不做操作,而save() 則更改原來的內容為新內容。

存在數據: { _id : 1, ” name ” : ” n1 ” }

insert({ _id : 1, ” name ” : ” n2 ” }) 會提示錯誤

save({ _id : 1, ” name ” : ” n2 ” }) 會把 n1 改為 n2 。

使用MongoCollection::findOne()查詢文檔

為了證明上面那段代碼的數據已經插入到數據庫里了,我們進行簡單的 findOne()操作以得到集合中的第一個文檔數據,這種方法只返回一個文檔數據,

這種方法適用於在你的查詢語句的時候只匹配一個文檔或者你只關心第一條數據

複製代碼 代碼如下:

?php

$obj = $collection-findOne();

var_dump( $obj );

?

你會看到下列結果

複製代碼 代碼如下:

array(5) {

[“_id”]=

object(MongoId)#6 (0) {

}

[“name”]

string(7) “MongoDB”

[“type”]=

string(8) “database”

[“count”]=

int(1)

[“info”]=

array (2) {

[“x”]=

int(203)

[“y”]=

int(102)

}

[“versions”]

array(3) {

[0]=

string(5) “0.9.7″

[1]=

string(5) “0.9.8″

[2]=

string(5) “0.9.9″

}

}

注意_id字段自動加載了文檔上,MongoDB儲存元素中以_以及$開頭的都是供內部使用的

添加更多文檔

為了做一些更有趣的事情,我們添加更多簡單的文檔到集合中,這些文檔如下

複製代碼 代碼如下:

?php

array( “i” = value );

?

我們可以使用循環相當有效的插入數據

複製代碼 代碼如下:

?php

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

$collection-insert( array( “i” = $i ) );

}

?

注意:我們可以插入不同的字段在同一字符集中,在這方面意味着MongoDB擁有非常自由的儲存模式

在一個集合中計算文檔的數量

現在我們插入了101個文檔(我們用循環插入了100個,之前還插入了一個),我們可以使用count()來看看我們的數據是不是都被插入進去了

複製代碼 代碼如下:

?php

echo $collection-count();

?

這段代碼將打印出101

MongoCollection::count() 也可以查詢字段數據

使用游標得到集合中的所有文檔

為了得到集合中的所有文檔,我們可以使用 MongoCollection::find()方法,find()方法返回一個 MongoCursor對象,可以讓我們重複得到查詢所匹配的的文檔

複製代碼 代碼如下:

?php

$cursor = $collection-find();

foreach ($cursor as $id = $value) {

echo “$id: “;

var_dump( $value );

}

?

這樣我們會打印出集合中的這101個文檔,$id就是文檔中的_id字段,$value 就是文檔本身

為查詢規定一個標準

我們可以通過find()方法得到集合中的文檔子集,例如,我們要查詢出集合中i字段為71的文檔,我們可以使用下列方法

複製代碼 代碼如下:

?php

$query = array( “i” = 71 );

$cursor = $collection-find( $query );

while( $cursor-hasNext() ) {

var_dump( $cursor-getNext() );

}

?

我們將打印如下數據

複製代碼 代碼如下:

array(2) {

[“_id”]=

object(MongoId)#6 (0) {

}

[“i”]=

int(71)

[“_ns”]=

“testCollection”

}

為查詢設定一個範圍

我們可以通過find()創建一個查詢語句以得集合中的一個子集,例如如果我們得到所有”i”50的文檔,我們可以使用如下代碼

複製代碼 代碼如下:

?php

$query = array( “i” = array(‘$gt’ =50)); //注意’$gt’兩邊的單引號

$cursor = $coll-find( $query );

while( $cursor-hasNext() ) {

var_dump( $cursor-getNext() );

}

?

我們同樣可以得到20 i = 30之間的數據

複製代碼 代碼如下:

?php

$query = array( “i” = array( “\$gt” = 20, “\$lte” = 30 ) );

$cursor = $coll-find( $query );

while( $cursor-hasNext() ) {

var_dump( $cursor-getNext() );

}

?

我們非常容易漏掉$美元符號,你也可以選擇你自定義的符號來代替美元符號,選擇一個不會在你的建裡面出現的符號例如”:”,在php.ini中加上這麼一句話

複製代碼 代碼如下:

mongo.cmd = “:”

那麼上面的代碼就可以替換成

複製代碼 代碼如下:

?php

$query = array( “i” = array( “:gt” = 20, “:lte” = 30 ) );

?

當然你也可以使用ini_set(“mongo.cmd”, “:”)的方法來改變

創建一個索引

MongoDB支持索引,並且可以很容易的加到一個集合中,你只要指定某個字段為索引就行了,並且還可以指定 正序索引(1)與 倒序索引(-1)

下面的代碼為I創建了索引

複製代碼 代碼如下:

?php

$coll-ensureIndex( array( “i” = 1 ) ); //在”i”上創建了一個索引

$coll-ensureIndex( array( “i” = -1, “j” = 1 ) );//在”i”上創建了倒序索引 在”j”上創建了正序索引

?

一個完整的簡單例子

這個例子展示了如何鏈接mongodb數據庫,如何選擇數據庫,如何插入數據,如何查詢數據,以及關閉數據庫鏈接

複製代碼 代碼如下:

?php

//鏈接

$m = new Mongo();

// 選擇一個數據庫

$db = $m-comedy;

$collection = $db-cartoons;

//添加一個元素

$obj = array( “title” = “Calvin and Hobbes”, “author” = “Bill Watterson” );

$collection-insert($obj);

//修改

$newdata = array(‘$set’ = array(“title” = “Calvin and Hobbes”));

$collection-update(array(“author” = “caleng”), $newdata);

//刪除

$collection-remove(array(‘author’=’caleng’), array(“justOne” = true));

//添加另一個元素,使用不同的格式

$obj = array( “title” = “XKCD”, “online” = true );

$collection-insert($obj);

//查詢所有的集合

$cursor = $collection-find();

//重複顯示結果

foreach ($cursor as $obj) {

echo $obj[“title”] . “\n”;

}

// 關閉鏈接

$m-close();

?

輸出結果為

複製代碼 代碼如下:

Calvin and Hobbes

XKCD

mongodb insert和save的相同點和區別

區別

若新增的數據中存在主鍵 ,insert() 會提示錯誤,而save()

則更改原來的內容為新內容。

如:

已存在數據: {_id : 1, ” name ” : ” n1 ” },再次進行插入操作時,

insert({_id : 1, ” name ” : ” n2 ” }) 會報主鍵重複的錯誤提示

save({ _id : 1, ” name ” : ” n2 ” }) 會把 n1 修改為 n2 。

相同點:

若新增的數據中沒有主鍵時,會增加一條記錄。

已存在數據: { _id : 1, ” name ” : ” n1 ” },再次進行插入操作時,

insert({ ” name ” : ” n2 ” }) 插入的數據因為沒有主鍵,所以會增加一條數據

save({ ” name ” : ” n2 ” })

增加一條數據。

mongodb的save和insert函數的區別

                   

mongodb的save和insert函數都可以向collection里插入數據,但兩者是有兩個區別:

一、使用save函數里,如果原來的對象不存在,那他們都可以向collection里插入數據,如果已經存在,save會調用update更新裡面的記錄,而insert則會忽略操作

二、insert可以一次性插入一個列表,而不用遍歷,效率高, save則需要遍歷列表,一個個插入。

看下這兩個函數的原型就清楚了,直接輸入函數名便可以查看原型,下面標紅的部分就是實現了循環,對於遠程調用來說,是一性次將整個列表post過來讓mongodb去自己處理,效率會高些

db.user.insert

function (obj, _allow_dot) {

    if (!obj) {

        throw “no object passed to insert!”;

    }

    if (!_allow_dot) {

        this._validateForStorage(obj);

    }

    if (typeof obj._id == “undefined” !Array.isArray(obj)) {

        var tmp = obj;

        obj = {_id:new ObjectId};

        for (var key in tmp) {

            obj[key] = tmp[key];

        }

    }

    this._db._initExtraInfo();

    this._mongo.insert(this._fullName, obj);

    this._lastID = obj._id;

    this._db._getExtraInfo(“Inserted”);

}

db.user.save

function (obj) {

    if (obj == null || typeof obj == “undefined”) {

        throw “can’t save a null”;

    }

    if (typeof obj == “number” || typeof obj == “string”) {

        throw “can’t save a number or string”;

    }

    if (typeof obj._id == “undefined”) {

        obj._id = new ObjectId;

        return this.insert(obj);

    } else {

        return this.update({_id:obj._id}, obj, true);

    }

}

下面是 python里的實現向mongo插入數據的代碼

import pymong

logItems =[]

logItems.append({“url”:”,”time”:0.2})

logItems.append({“url”:”,”time”:0.12})

logItems.append({“url”:”,”time”:0.24})

def addLogToMongo(db,logItems):

     #建立一個到mongo數據庫的連接

     con = pymongo.MongoClient(db,27017)

     #連接到指定數據庫

     db = con.my_collection

#直接插入數據,logItems是一個列表變量,可以使用insert直接一次性向mongoDB插入整下列表,如果用save的話,需一使用for來循環一個個插入,效率不高

     db.logDetail.insert(logItems)

     ”’

      for url in logItems:

          print(str(url))

          db.logDetail.save(url)

     ”’

               

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243126.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:54
下一篇 2024-12-12 12:54

相關推薦

  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python實現身份信息模擬生成與查驗

    本文將從以下幾個方面對Python實現身份信息模擬生成與查驗進行詳細闡述: 一、身份信息生成 身份信息生成是指通過代碼生成符合身份信息規範的虛假數據。Python中,我們可以使用f…

    編程 2025-04-27
  • Dapper使用getschema獲取表信息

    本文旨在介紹Dapper中使用getschema獲取表信息的方法和注意事項。 一、獲取某張表的所有列信息 使用Dapper獲取某張表信息,可以使用 `IDbConnection.G…

    編程 2025-04-27
  • 通過提交信息搜索-使用git

    本篇文章重點講解如何使用git通過提交信息來搜索。我們將從多個方面介紹如何使用git來搜索提交信息,並提供相應的代碼示例以供參考。 一、搜索方式 Git提供了三種搜索方式,分別為:…

    編程 2025-04-27
  • 已裝備我軍的空中信息化作戰平台

    本文將會從多個方面詳細闡述已裝備我軍的空中信息化作戰平台。 一、平台概述 已裝備我軍的空中信息化作戰平台是一個全新的作戰系統,具備實時數據採集、處理、分析、共享的能力。它可以在不同…

    編程 2025-04-27
  • Linux查看系統信息

    一、CPU信息 Linux系統下,查看CPU的信息最常用的命令是lscpu。該命令可以顯示CPU架構、核心數量、線程數、緩存大小、CPU頻率等信息。例如: lscpu 該命令會輸出…

    編程 2025-04-24
  • 軟考 信息安全工程師

    軟考 信息安全工程師是一項技能型國家級資格認證考試,主要測試考生在信息安全領域的理論知識和實踐技能,是證明個人信息安全能力的重要證書。本文將從多個方面對軟考 信息安全工程師做詳細的…

    編程 2025-04-23

發表回復

登錄後才能評論