1

我在 grails+mongodb 中第一次过期。我在保存对象时遇到问题。首先,我以这种方式将本地 mongo db 连接到 grails:

grails {
    mongo {
        host = "localhost"
        //port = 27107
        //username = "login"
        //password="pwd"
        databaseName = "db"
     }
}

我不知道为什么,但是如果我指定端口和登录名+密码(我使用这样的密码创建这样的用户),grails 会给我一个错误,即无法连接到 mongodb。这是 mongodb 在守护进程开始时的日志:22:47:04 [initandlisten] MongoDB 开始:pid=918 port=27017 dbpath=/var/lib/mongodb 64-bit host=ubnt-VirtualBox

好的,没有端口和登录+通过它可以工作。接下来我创建域:

class Cover {
    String name
    String url

    static constraints = {
        name(blank: false)
        url(blank: false)
    }

    static mapping = {
        collection "cover"
        database "covers"
    }
}

我尝试保存它:

Cover cover = new Cover()
cover.name = title.text()
cover.url = url
println("Try to save object: ${cover.toString()}")
cover.save()
println("After save object: ${cover.toString()}")

我有什么输出:

Try to save object: com.mydomain.Cover : (unsaved)
After save object: com.mydomain.Cover : 23

当我使用命令 'mongo' 运行 shell 时,请尝试:

>use covers
>db.cover.find()

我看到收藏中没有任何东西。但是当我查看 db.cover.next_id.find() 时,我看到了 23。所以看起来 id 增加了。我不知道为什么对象没有保存到 mongodb。为什么?在我尝试连接到 mongodb 并通过 java 驱动程序保存并保存之前(所以 mongodb 似乎安装正确)。

另外,当我运行 shell 时,我会看到这样的信息 >connecting to: test what mean test? 我以前可以在哪里配置它?可能是 shell 连接到一个数据库而 grails 连接到另一个数据库?

4

2 回答 2

0

I have found an error, it discovers for me that source in src/groovy have to access to grails sources in specific way, so to save cover I need to create service in grails, where I cna implemet save method, and they in place where I want to call save I should get service in such way

def ctx = ServletContextHolder.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
CoverService coverService = ctx.coverService

And now it works.

于 2013-10-16T20:39:42.617 回答
0

对我来说,除非您有一些约束错误,否则它似乎可以毫无问题地保存...您是否尝试在保存/验证后打印错误?

println cover.errors

您也可以尝试从应用程序中恢复所有实例,而无需查看 mongo

println Cover.list()

如果使用最后一行,您可以看到保存的实例,则可能 grails 正在混合数据库,就像您在 databaseName=db 中一样,您稍后说应该将 Cover 保存到数据库中

于 2013-10-15T06:10:27.807 回答