尝试写入 MongoDB 副本集的 PHP 错误
Posted
技术标签:
【中文标题】尝试写入 MongoDB 副本集的 PHP 错误【英文标题】:PHP error trying to write to MongoDB replica set 【发布时间】:2012-07-07 02:42:53 【问题描述】:我在向位于另一台机器上的副本集写入/更新插入时遇到问题。这是执行的代码:
<?php
//Create a connection
$connection = new Mongo("mongodb://user:password@mycompany.com:27017/dbName", array("persist" => "pcName", "replicaSet"=>"myReplSet"));
//Select a database
$db = $connection->dbName;
//Select a collection
$collection = $db->testCollection;
//Add a record
$obj = array("FirstName" => "Brian", "LastName"=>"Renze", "Email"=>"abc@me.com");
$collection->insert($obj);
?>
我收到一个错误:致命错误:未捕获的异常 'MongoCursorException' 带有消息 'bad or malformed command request?' 后跟 下一个异常 'MongoCursorException' 带有消息 'couldn '不确定主人'
没有向数据库写入任何内容,但我不确定我正在使用的代码有什么问题。它是 php.net 上 php-mongo 教程的几乎完全相同的副本。
我们的 mongoDB 实例仅在直接连接到数据库(在本例中为 dbName)时可用,所以我应该采取“选择数据库”步骤吗?
如何找到副本集的主实例?这不应该自动发生吗?
有什么建议吗?
谢谢, 布赖恩·伦岑布林克
【问题讨论】:
$collection = $db-> testCollection 是否缺少分号? 这是在我发布的问题中,但不在我的代码中。我已经在问题中进行了编辑以解决该问题。 【参考方案1】:我认为您正在尝试在没有设置的情况下使用副本集。
如果您删除 replicaSet
参数:
$connection = new Mongo("mongodb://user:password@mycompany.com:27017/dbName", array("persist" => "pcName"));
应该可以的。
如果不起作用,能否包括 mongo、php、mongo-php 的版本以及您的操作系统的版本?
您可以在此处阅读有关复制的更多信息:http://www.mongodb.org/display/DOCS/Replication
您可以在此处阅读有关连接的更多信息:http://www.php.net/manual/en/mongo.connecting.php
【讨论】:
这消除了错误,但我没有成功地将数据插入数据库。当我连接到主节点时,我没有看到创建名为“testCollection”的新集合。 Mongo 1.85 版,php 5.3.6 版,mongo-php 1.2.4 版 没有错误,当我回显数据时,我看到为 $obj 创建了一个 MongoId。不幸的是,它没有被写入数据库。 您确定您在正确的数据库中查看新集合吗?你可以运行:show dbs
,然后是use
,无论你有什么数据库名称……然后是db.testCollection.find()
所以看起来我没有在连接参数中使用正确的副本集名称,这是我们的块。不幸的是,我现在出现了一个不同的问题。我已经编辑了原始帖子的底部以包含这些数据。感谢您的帮助!以上是关于尝试写入 MongoDB 副本集的 PHP 错误的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose搭建mongoDB副本集(1主+1副+1仲裁)