當前位置:首頁 » 編程語言 » phpmongodb

phpmongodb

發布時間: 2022-12-28 05:21:40

1. 為什麼我用php查詢mongodb資料庫中的某個集合中的文檔的條數,得到的結果和實際情況不一致

我也遇到過:

官方文檔解釋了這種現象的原因以及解決方法:
不準確的原因:

  • 操作的是分片的集合(前提);

  • shard分片正在做塊遷移,導致有重復數據出現

  • 存在孤立文檔(因為不正常關機、塊遷移失敗等原因導致)

    解決方法

  • 使用聚合aggregate的方式查詢count數量,shell命令如下:


    db.collection.aggregate(
    [
    { $group: { _id: null, count: { $sum: 1 } } }
    ])

    也可以直接將原數據導出,將表刪除後重新導入就可以了(我是這么處理的)

2. mongodb 樂觀鎖怎麼使用php

sql中並發控制採用的樂觀鎖就是在記錄中增加版本號或timestamp,那麼MongoDB中如何實現呢?
Mongodb不善於處理事務,但提供了findAndModify命令。該命令允許對文檔進行原子性更新,並在同一次調用中返回:
代碼如如:
db.collection_yown.findAndModify(
{
query:{"name":"yown"},update:{"version":2},new:true or false
}
)
默認情況下,findAndModify命令會返回更新前的文檔,要是返回修改後的文檔,就把new設置為false.
Mongodb同時也提供update命令,這兩者的區別如下:
update和findAndModify都可以用做更新操作;
區別
findAndModify是有返回值的,輸出中的value欄位即返回修改之前的文檔,使用 new:true選項返回修改後的文檔。 update是更新操作,是沒有返回值的。
findAndModify 強調操作的原子性(atomically),比如用來實現自增1的操作或者操作隊列。屬於 get-and-set 式的操作,一般來講,findAndModify 比update操作稍慢,因為需要等待資料庫的響應。
另外findAndModify ,其中modify可以是update,還可以是remove
{
findAndModify: <string>,
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
}

3. php操作mongoDB資料庫查詢的時候怎樣寫「或」這樣的多個條件查詢代碼

據我所知,目前mongoDB沒有「或」這個東西

但我剛才在網上查了下
發現了下面的信息,你參考下吧

在mongodb中有$or 操作符的,官網中給出的例子如下:

Simple:

db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )

With another field

db.foo.find( { name : "bob" , $or : [ { a : 1 } , { b : 2 } ] } )

The $or operator retrieves matches for each or clause indivially and eliminates plicates when returning results. A number of $or optimizations are planned for 1.8. See this thread for details.
$or cannot be nested.

4. 如何用php對mongodb進行模糊查詢

$mongo_db->like('name','維達');
你試試看還不行的話樓主可以自己去後盾人看看,還送後盾會員卡哦

5. 如何使用php文件測試mongodb是否安裝成功

<?php
$m=newMongo('mongodb://lxx:[email protected]:27017');
//mongodb://username:password@IP:port
$a=$m->connect();
if($a){
echo"success";
}
else{
echo"wrong";
}
?>

6. thinkphp6 版本 mongodb 連表查詢 案例

# https://www.cnblogs.com/cangqinglang/p/14858131.html
public function index(){

// 方法1 您可以使用 $toObjectId聚合實現此目的,該聚合僅將字元串ID轉換為mongoose objectId
// https://blog.csdn.net/az9996/article/details/110141289
// 多表查詢 https://blog.csdn.net/eric_to/article/details/90093806

$pipeline = [
['$addFields'=>['company_id'=>['$toObjectId'=>'$company_id']]],
['$match'=>['$expr'=>['$eq'=>["\$company_id", "$\$company_Id"]]]],
];
$pipelines = [
// ['$match'=>["_id"=>new \MongoDB\BSON\ObjectId("5cb7e580a6c98abc468b458b")]],
// ['$match'=>["name"=>"xxx限公司"]],
[
'$lookup'=>[
'from'=>'oa_company_member_pay',
"let"=>["company_Id"=>"\$_id" ],
"pipeline"=>$pipeline,
'as'=>'company_pay'
],
]
];
// php 執行 產生了 2571 條數據 但是 用 db.runCommand() 執行 列印的 sql 語句 只有 101 條記錄
mp(Db::connect('mongo')->name('oa_company')->cmd([
'aggregate'=>'oa_company',
'pipeline'=>$pipelines,
'explain'=>false,
]));

mp(Db::connect('mongo')->getLastSql());

// 以下 mongodb sql 在 資料庫 查詢 通過 有 2571 條記錄
// db.getCollection("oa_company").aggregate([
// {
// "$lookup": {
// "from": "oa_company_member_pay",
// "let": { "company_Id": "$_id" },
// "pipeline": [
// { '$addFields': { "company_id": { "$toObjectId": "$company_id" }}},
// { "$match": { "$expr": { "$eq": [ "$company_id", "$$company_Id" ] } } }
// ],
// "as": "company_member_pay"
// }
// }
// ])
// 以下 mongodb sql 在 資料庫 查詢 通過 只有 101 條記錄
// db.runCommand({
// "aggregate":"oa_company",
// "pipeline":[
// {
// "$lookup":{
// "from": "oa_company_member_pay",
// "let": { "company_Id": "$_id" },
// "pipeline": [
// { '$addFields': { "company_id": { "$toObjectId": "$company_id" }}},
// { "$match": { "$expr": { "$eq": [ "$company_id", "$$company_Id" ] } } }
// ],
// "as": "company_member_pay"
// }

// }
// ],
// "explain":false
// })

// 方法2 或者使用$toString聚合 可以通過 2571

// db.getCollection('oa_company').aggregate([
// { "$addFields": { "companyidStr": { "$toString": "$_id" }}},
// { "$lookup": {
// "from": "oa_company_member_pay",
// "localField": "companyidStr",
// "foreignField": "company_id",
// "as": "pay"
// }}
// ])
/*
$pipelines = [
// ['$match'=>["_id"=>new \MongoDB\BSON\ObjectId("5cb7e580a6c98abc468b458b")]],
// ['$match'=>["name"=>"xxx有限公司"]],
['$addFields'=>['companyidStr'=>['$toString'=>'$_id']]],
[
'$lookup'=>[
'from'=>'oa_company_member_pay',
'localField'=>'companyidStr',
'foreignField'=>'company_id',
'as'=>'company_pay'
],
]
];
// php 執行 產生了 2571 條數據 但是 用 db.runCommand() 執行 列印的 sql 語句 只有 101 條記錄
mp(Db::connect('mongo')->name('oa_company')->cmd([
'aggregate'=>'oa_company',
'pipeline'=>$pipelines,
'explain'=>false,
]));

mp(Db::connect('mongo')->getLastSql());

// db.cmd({"aggregate":"oa_company","pipeline":[{"$addFields":{"companyidStr":{"$toString":"$_id"}}},{"$lookup":{"from":"oa_company_member_pay","localField":"companyidStr","foreignField":"company_id","as":"company_pay"}}],"explain":false});

// 下面 執行 不可以 只有 101 條數據
db.runCommand({"aggregate":"oa_company","pipeline":[{"$addFields":{"companyidStr":{"$toString":"$_id"}}},{"$lookup":{"from":"oa_company_member_pay","localField":"companyidStr","foreignField":"company_id","as":"company_pay"}}],"explain":false});

*/

}

7. 如何為PHP安裝mongodb的擴展

1.首先下載php的mongodb擴展
從http://pecl.php.net/package/mongo這個網址下載mongodb的擴展源碼

1

wget http://pecl.php.net/get/mongo-1.4.5.tgz

2.解壓安裝包

1

tar zxf mongo-1.4.5.tgz

3.進入解壓目錄,運行phpize進行安裝准備

1
2

cd mongo-1.4.5
/usr/local/php/bin/phpize

4.安裝編譯
上述命令運行完後,在目錄下就生成了configure文件
使用./configure命令進行安裝配置,然後使用make && make install進行編譯安裝,命令如下:

1
2

./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

5.編輯php.ini增加下述一行添加mongodb擴展

1

extension=mongo.so

重啟web容器,然後查看phpinfo,看到mongodb的內容就說明安裝成功。

8. PHP 從 MongoDb 中查詢數據怎麼樣實現

創建Mongodb資料庫 由於Mongodb不是關系型資料庫文件,實際上,它並不存在傳統關系型資料庫中的所謂「資料庫」的概念,但不用擔心,當你第一次新增數據時,mongodb就會以collection集合的形式進行保存和新建,而不需要你手工去新建立。以後可以去後盾人上面看看哦⊙∀⊙!裡面有教學是哦

熱點內容
水電煤演算法 發布:2025-07-04 18:36:44 瀏覽:328
天翼視訊緩存文件夾 發布:2025-07-04 18:36:43 瀏覽:96
unix網路編程第2卷 發布:2025-07-04 18:33:41 瀏覽:780
編譯歷史 發布:2025-07-04 18:23:01 瀏覽:851
空調壓縮機種類 發布:2025-07-04 18:13:58 瀏覽:242
中國有ip6伺服器嗎 發布:2025-07-04 17:58:56 瀏覽:726
第六章編譯原理答案 發布:2025-07-04 17:37:55 瀏覽:40
php內存優化 發布:2025-07-04 17:25:54 瀏覽:664
威綸觸摸屏如何設置時間限制密碼 發布:2025-07-04 17:25:50 瀏覽:418
python列表的遍歷 發布:2025-07-04 17:24:20 瀏覽:24