我的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位主机= 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时,我看到这样的信息>连接到:test是什么意思测试?我可以在哪里配置它?可能是shell连接到一个db并且grails到另一个?
答案 0 :(得分:0)
对我而言,除非你遇到一些约束错误,否则它似乎没有问题。 保存/验证后是否尝试打印错误?
println cover.errors
此外,您可以尝试从应用程序中恢复所有实例,而无需使用
查看mongoprintln Cover.list()
如果使用这最后一行你可以看到你保存的实例,也许grails就像你在databaseName = db中那样混合数据库,你后来说Cover应该保存到涵盖数据库
答案 1 :(得分:0)
我发现了一个错误,它发现我在src / groovy中的源必须以特定的方式访问grails源,所以为了保存封面我需要在grails中创建服务,我在cna实现save方法,然后他们在我要打电话的地方保存我应该以这种方式获得服务
def ctx = ServletContextHolder.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
CoverService coverService = ctx.coverService
现在它有效。