今天我更新到MacOS 10.15(Catalina).当我在终端中运行mongod时,它找不到/data/db目录:

➜  /Users/william > mongod
2019-10-08T17:02:44.183+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] MongoDB starting : pid=43162 port=27017 dbpath=/data/db 64-bit host=Williams-MacBook-Pro-6.local
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] db version v4.0.3
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] allocator: system
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] modules: none
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] build environment:
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     distarch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] options: {}
2019-10-08T17:02:44.211+0800 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] now exiting
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] shutting down with code:100
➜  /Users/william > 

我试着用brew安装MongoDB:

brew install mongodb

➜  /Users/william > brew install mongodb
Updating Homebrew...
Error: mongodb: unknown version :mountain_lion

有什么帮助吗?

推荐答案

这是主要错误:

initAndListen中出现异常:不存在路径:未找到数据目录/Data/db.,终止

Catalina有一个惊人的变化:它不允许对根目录进行更改(这也在forum thread中讨论过):

% sudo mkdir -p /data/db
mkdir: /data/db: Read-only file system

不幸的是,除了在Catalina features中有一个简短的提及外,苹果的Catalina release notes强中没有明确说明这一点:

macOS Catalina在专用的只读系统卷中运行

由于目录/data/db被编码为MongoDB default,解决方法是指定一个不在根目录上的不同目录dbpath.例如:

mongod --dbpath ~/data/db

这将把MongoDB的数据放在您的主目录中.只需确保路径~/data/db确实存在.

Alternative method

另一种方法是按照Install MongoDB Community Edition on macOS处的说明,利用brew:

brew tap mongodb/brew
brew install mongodb-community

默认情况下,这将创建一些附加文件:

  • 配置文件(/usr/local/etc/mongod.conf)
  • 日志(log)目录路径(/usr/local/var/log/mongodb)
  • 数据目录路径(/usr/local/var/mongodb)

要跑mongod,你可以:

  • 从命令行手动运行命令(为了方便起见,可以使用别名):

    mongod --config /usr/local/etc/mongod.conf
    
  • 使用brew services作为服务运行MongoDB.请注意,这将作为独立 node (而不是副本集)运行MongoDB,因此依赖于oplog的功能(例如changestreams)将无法工作,除非您修改mongod配置文件:

    brew services start mongodb-community
    

Mongodb相关问答推荐

在mongo聚合管道的组阶段排除字段,但在最后将其包含在内

在对象mongodb的数组中查找元素

MongoDB - 在 $lookup 管道中匹配键匹配不起作用

PHP 无法加载动态库 (mongo.so)

更新文档中的数组时,如何在 MongoDB 和 C# 中使用 $push 更新修饰符

MongoDB - 清除嵌套数组中的元素

使用 brew upgrade Mongo update from 3.4 to 4.0 报错:在try 升级到 4.0 之前,数据文件需要完全升级到 3.6 版

MongoDB $or 查询

MongoDB GridFS VS 直接磁盘 IO

NoSQL:MongoDB 或 BigTable 并不总是 Available意味着什么

无法从 MongoDb C# 中的 BsonType ObjectId 反序列化字符串

java.lang.IncompatibleClassChangeError:Implementing class Mongo

mongoose得到`TypeError: user.save is not a function` - 出了什么问题

从每个组中 Select 前 N 行

具有 AWS 云形成和自动zoom 的 Mongodb 集群

如何在 NoSql 数据库(MongoDB)中强制执行外键?

使用 $in 进行不区分大小写的搜索

MongoDB Compass timeouts超时

MongoDB:删除唯一约束

即使重新安装后,Mongo 仍在等待 27017