最近在使用MongoVUE对MongoDB进行管理,作为一个可视化管理工具还是十分方便和快捷。不过刚开始使用时就遇到了一些小问题,在进行修改操作时弹出错误提示:Error in performing Update/cannot use 'j' option when a host does not have journaling enabled。后经过研究,发现造成此问题主要是MongoDB的日志系统未开启,解决方法就是开启MongoDB的日志系统。
先说下问题的具体情况:每当使用MongoVUE执行修改操作都会引发错误,虽然最终的修改操作是成功的,但是依然会提示在执行修改操作的时候发生了错误。
错误截图如下:
错误信息如下:
Error in performing Update
WriteConcern detected an error 'cannot use 'j' option when a host does not have journaling enabled'. (response was { "connectionId" : 1, "updatedExisting" : true, "n" : 1, "badGLE" : { "getlasterror" : 1, "j" : true }, "ok" : 0.0, "errmsg" : "cannot use 'j' option when a host does not have journaling enabled", "code" : 2 }).
Type: MongoDB.Driver.WriteConcernException
Stack: 在 MongoDB.Driver.Operations.WriteOperation.SendMessageWithWriteConcern(MongoConnection connection, BsonBuffer buffer, Int32 requestId, BsonBinaryReaderSettings readerSettings, BsonBinaryWriterSettings writerSettings, WriteConcern writeConcern)
在 MongoDB.Driver.Operations.UpdateOperation.Execute(MongoConnection connection)
在 MongoDB.Driver.MongoCollection.Update(IMongoQuery query, IMongoUpdate update, MongoUpdateOptions options)
在 MongoDB.Driver.MongoCollection.Update(IMongoQuery query, IMongoUpdate update, UpdateFlags flags, WriteConcern writeConcern)
在 MangoUI.MCollections.UpdateIt(String db, String coll, BsonDocument match, BsonDocument update, Boolean multi, Boolean upsert, Boolean journal)
在 MangoUI.ComUpdate.UpdateDocuments(Boolean multi)
Inputs::
Command: getlasterror
Ok: False
ErrorMsg: cannot use 'j' option when a host does not have journaling enabled
Request: { "getlasterror" : 1, "j" : true }
Response: { "connectionId" : 1, "updatedExisting" : true, "n" : 1, "badGLE" : { "getlasterror" : 1, "j" : true }, "ok" : 0.0, "errmsg" : "cannot use 'j' option when a host does not have journaling enabled", "code" : 2 }
从上面的错误信息提示就可以看出,主要故障原因在于MongoDB的Journaling日志系统未开启。未开启的原因大概有几点,一是没有安全的退出MongoDB,二是当前的系统环境是32位系统,由于Journaling需要占用较多内存,而32位系统的内存较小,所以默认Journaling是关闭的。
每当启动MongoDB就可以看到关于Journaling未开启的提示:
官方文档也对此进行了说明,64位系统默认是开启日志:
根据提示,只要使用–journal命令就可以成功开启日志系统,这里又分为两种情况,如果MongoDB没有作为Windows服务安装,那么只要在启动MongoDB的命令里加上–journal即可:
mongod --journal
如果MongoDB是作为Windows服务安装,那问题估计要复杂点,由于本人对mongodb还在研究学习阶段,只能采取笨办法,先关掉服务,然后卸载掉再重新安装服务,安装的时候带上–journal命令。
首先停止服务:
然后卸载MongoDB服务:
mongod --dbpath "E:/MongoDB/Server/3.2/data/db" --logpath "E:/MongoDB/Server/3.2/data/log/MongoDB.log" --remove
最后重新安装MongoDB服务:
mongod --dbpath "E:/MongoDB/Server/3.2/data/db" --logpath "E:/MongoDB/Server/3.2/data/log/MongoDB.log" --install --journal
卸载和安装操作都需要在MongoDB目录下通过命令行工具执行,这里展示的操作语句是根据本人当时的安装环境来进行操作的,所以如果有需要的朋友要注意根据自身的系统环境进行修改。
最后总结下,其实最好的解决方式就是使用64位的操作系统,有条件最好就换个系统吧,良好的开发环境对应程序员同胞来说还是很重要的。
相关资料:
- 在windows上安装mongodb的官方文档
- Journaling的官方文档
- Manage Journaling
- staciouerflow相关问题1
- staciouerflow相关问题2
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/98740.html