尝试写入 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仲裁)

MongoDB运维注意点

docker-compose 配置 mongodb 副本集/复制集

mongdb 副本集的原理搭建应用

Mongodb集群架构之副本集

mongo 单机开启副本集事务