【问题标题】:MongoDB and PHP connectionMongoDB和PHP连接
【发布时间】:2019-02-16 22:30:30
【问题描述】:

我正在尝试在 Ubuntu 16.04 上将 MongoDB 与 php5.6 一起使用。我有一个创建集合的 php 脚本。当我在我的 Apache Web 服务器上打开脚本时,它显示“连接成功,已创建集合”但是当我登录 mongo 终端并切换到数据库(ecoss)时,我找不到该集合。

要建立连接:我通过运行 sudo apt-get updatesudo apt-get install php5.6-mongo 安装了 mongoDB 扩展

之后我编辑了我的 php.ini 文件并添加了扩展名extension=mongo.so;

php-mongo的安装:

我的 php.ini 文件的摘录:

这是我的 php 脚本create.php

<?php

    // connect to mongodb
    $m = new MongoClient();

    $db = $m->ecoss;    
    echo "Connection successful, Database ecoss selected" . "<br>";

    $collection = $db->createCollection("mycol");
    echo "Collection created succsessfully";

?>

执行上述脚本后,在我的浏览器上输出:

连接到ecoss数据库并运行命令show collections后在mongo终端上输出:

【问题讨论】:

  • Mongo 在必要时不会创建集合。您没有将任何特殊选项传递给 createCollection,因此 Mongo 不需要创建集合。它将在您第一次尝试插入数据时隐式创建。我不确定这是否是 Mongo 不创建集合的原因,但这似乎是合理的。
  • 我试图在 mongo 终端上创建一个集合,而不传递任何选项或插入数据。运行 show collections 后,我可以看到我新创建的集合。这就是为什么我不明白为什么它不能在 php 上运行。
  • 你可以在执行 createCollection 后转储 $collection 并查看它返回的内容吗?
  • @eselskas 嘿,它正在返回 ecoss.mycol 。这可能意味着什么!

标签: php mongodb


【解决方案1】:

我的问题已经解决了!

通过php创建新集合时,会创建集合。感谢@eselskas,我看到在转储$collection 时,它返回了ecoss.mycol。 问题是在连接到数据库ecoss 并运行命令show collections 后,该集合不会出现在mongo shell 上。这是由于 php 访问 mongo 的身份验证问题。

以下是帮助我解决此问题的步骤:

  1. 使用use admin 连接到管理数据库
  2. 删除管理员数据库db.dropDatabase()
  3. 删除文件mongod.service中的--authsudo nano /lib/systemd/system/mongod.serviceExecStart 行应显示为ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf(删除--auth 后)
  4. 运行命令sudo systemctl daemon-reloadsudo systemctl restart mongod重新加载服务。

经过上述步骤,我运行我的create.php脚本,并登录mongo和我的数据库ecoss然后创建show collections,我可以清楚地看到我的收藏mycol.

【讨论】:

  • 很高兴你把它整理好了!
猜你喜欢
  • 2017-09-29
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2017-06-14
  • 2020-01-10
  • 2018-02-23
  • 2017-04-17
相关资源
最近更新 更多