mongo和mongod有什么实际区别?

时间:2015-08-13 07:17:40

标签: mongodb

刚刚完成安装mongodb,但是,我无法完全理解mongomongod命令之间的区别。是的,我明白了

  

mongod是MongoDB系统的主要守护进程

那个

  

mongo是MongoDB的交互式JavaScript shell接口

但实际上这意味着什么?我假设每次我想使用mongodb,我都需要先运行mongod。但是,为什么我可以在没有先启动mongo的情况下运行mongodmongo会自动在后台运行mongod吗?其次,如果我运行mongod,它最终会以

之类的结尾
  

等待端口27017上的连接

然后我不能在那之后打字。再次,我认为mongodb已经在后台启动,所以我可以安全地关闭终端。但如果我错误地关闭了终端(在Mac上),我该如何在终端上备份?另外,如何终止服务以停止收听端口?

因此,我可以看到,我有一堆简单的问题......但大多数问题与时间和时间mongomongod的实际用法有关。我似乎无法在网上找到任何可以帮助我在实际意义上解释这些内容的东西。

2 个答案:

答案 0 :(得分:17)

与大多数数据库软件一样,Mongo分为服务器客户端。服务器是存储和管理数据的主要数据库组件。客户端有各种风格并连接到服务器以插入或查询数据。

mongod是服务器部分。你开始它,它运行,故事结束 mongo是默认的命令行客户端。你启动它,连接到服务器,输入命令,然后退出它。

您必须先运行mongod,否则您没有要与之交互的数据库。只需在命令行上运行mongod将使其成为最前面运行的应用程序,并且它不提供任何交互性。所以,是的,你只会看到像#34;等待连接......"等等。您通常不会在命令行上运行mongod。您通常创建init.d脚本或launchd文件,或者管理守护程序,并让系统在系统引导时自动启动它。

如果您要将mongod作为一次性内容启动而不在系统上永久运行,请将其置于后台:

$ mongod &

&将其置于后台,您可以继续使用命令行。你可以看到它并像这样杀死它:

~ deceze$ mongod &
[1] 1065
~ deceze$ jobs
[1]+  Running                 mongod &
~ deceze$ kill %1
[1]+  Done                    mongod

服务器运行后,启动mongo,连接到服务器并与之交互。如果您尝试在没有正在运行的服务器的情况下运行mongo,则应该抱怨它无法连接:

~ deceze$ mongo
MongoDB shell version: 3.0.2
connecting to: test
2015-08-13T09:36:13.518+0200 W NETWORK  Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
2015-08-13T09:36:13.521+0200 E QUERY    Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
    at connect (src/mongo/shell/mongo.js:179:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed

如果您的mongo shell确实连接了某些内容,您可能会在不知情的情况下在您的系统上运行另一个mongod实例。

答案 1 :(得分:0)

使用mongod,您将在计算机上启动服务器。正如您所说,如果您愿意,mongo是您的客户端,您的用户界面。默认情况下,它连接到MongoDB的本地实例。如果您在没有运行服务器实例的情况下启动客户端,则必须告诉'它应该连接到哪里(例如远程实例):

http://docs.mongodb.org/manual/reference/program/mongo/