Ⅰ php7.1往mongodb 寫NumberLong和NumberInt怎麼處理
解決方案:可以先對數據進行轉換,轉換完後再插入到資料庫
例如:
$spec = array(
'name' => '張三',
'state' => new MongoInt32(100)
);
或
$spec = array(
'name' => '張三',
'state' => new MongoInt64(100) //NumberLong
)
Ⅱ 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});
*/
}
Ⅲ 應知道哪些PHP資料庫的基礎知識
這個問題問得有點模糊,什麼叫PHP資料庫?應該是PHP操作資料庫吧。如果是說PHP操作資料庫的話,那你應該了解如下內容:
1、市面上有哪些資料庫。市面上有很多資料庫,既有SQL型的資料庫,如MySql、SQLSever,也有Nosql型資料庫,如Redis、Mongodb
2、PHP可以操作哪些資料庫。PHP基本上可以操作市面上的所有資料庫。
3、PHP是如何操作資料庫的。PHP操作資料庫是有兩種方式,一種是使用PHP中對應資料庫的擴展,如操作mysql,PHP可以使用Mysqli擴展;另一種是物伏使用PDO擴展和對應的資料庫驅動。
4、這些資料庫擴展如何安裝啟動的。通常一些常見的資料庫的擴展PHP源碼是有包含的,如PDO、MySql,所以像這種你盯逗只需要在安裝PHP時,通過設置幾個參數來啟用就好,但像Redis、Mongodb等這些PHP源碼里沒有包含,所以在安裝好PHP後,你需要先下載這些擴展,然後編譯,最後在php.ini文件里開啟。
5、如何使用PHP代碼操作這些資料庫。在罩則攜安裝好對應的擴展後,你基本上就可以使用PHP代碼操作資料庫了,如連接資料庫、執行資料庫操作、關閉資料庫,但具體怎麼寫,可以參考對應擴展的開發文檔,一般文檔都有明確說明。
了解了以上幾點,你就可以使用PHP操作資料庫了
Ⅳ php如何實現的mongoDB單例模式操作類
class Mongo_db{ private static $cli; /** * 不允許初始化 */ private function __construct() { $config = Config::get('config.mongo_config'); if(empty($config)){ $this->throwError('無法連接資料庫!'); } if (!empty($config["user_name"])) { $this->mongo = new MongoClient("mongodb://{$config['user_name']}:{$config['password']}@{$config['host']}:{$config['port']}"); }else { $this->mongo = new MongoClient($config['host'] . ':' . $config['port']); } } /** * 單例模式 * @return Mongo|null */ public static function cli(){ if(!(self::$cli instanceof self)){ self::$cli = new self(); } return self::$cli->mongo; }}$mongo = Mongo_db::cli()->test->mycollection;