如何从groovy / grails查询mongodb?

时间:2014-05-12 19:47:59

标签: mongodb grails

我是否必须拥有一个域对象来查询mongodb

如果我只想显示一些原始数据怎么办?从我的控制器查询mongodb的语法是什么?

我试过

"def var = db.nameOfMyCollection.find()"

但它在我的控制器类中没有说db这样的属性。

我知道我的应用程序正在连接到数据库,因为我正在监视mongo server日志,并且当我启动grails应用程序时,它会将连接数增加一个。

3 个答案:

答案 0 :(得分:5)

假设您在构建配置中添加了mongodb java驱动程序依赖项并刷新了依赖项。

创建名为 MongoService.groovy 的grails服务,并输入以下代码。

别忘了导入mongodb

package com.organisation.project

import com.mongodb.*


class MongoService {
    private static MongoClient mongoClient
    private static host = "localhost"    //your host name
    private static port = 27017      //your port no.
    private static databaseName = "your-mongo-db-name"

    public static MongoClient client() {
        if(mongoClient == null){
            return new MongoClient(host,port)
        }else {
            return mongoClient
        }
    }

    public DBCollection collection(collectionName) {
        DB db = client().getDB(databaseName)
        return db.getCollection(collectionName)
    }
}

我们现在可以在我们的控制器或其他服务中使用此MongoService。

现在您可以在控制器中执行以下操作。

别忘了导入mongodb.DBCursor

package com.organisation.project



import com.mongodb.DBCursor

class YourControllerOrService {

    def mongoService    //including Mongo service 

    def method(){
        def collection = mongoService.collection("your-collection-name")
        DBCursor cursor =  collection.find()
        try{
            while(cursor.hasNext()){
                def doc = cursor.next()
                println doc     //will print raw data if its in your database for that collection
                }

         }finally {
                  cursor.close()
         }

    }
}

有关详细信息,请参阅mongodb java docs

答案 1 :(得分:1)

好的,解决了。

这是您访问数据库的方式。

import com.mongodb.*
MongoClient mongoClient = new MongoClient("localhost", 27017)
        DB db = mongoClient.getDB("db");

我实际上是用Java解决了它,然后将它粘贴到groovy中,它也可以在那里工作,这不应该是一个惊喜。不同的是,在Java中你实际上必须导入jar驱动程序,但在Grails中,你安装了Mongo GORM插件。

答案 2 :(得分:0)

假设您正在使用MongoDB GORM Plugin,如果您的grails应用程序中有域类,则可以像使用任何关系数据库后端一样使用它们。

但是,根据this documentation,您可以通过首先声明属性mongo来访问任何控制器或服务中的低级Mongo API,就像使用服务一样,然后获取数据库。定位

def mongo
def myAction = {
    def db = mongo.getDB("mongo")
    db.languages.insert([name: 'Groovy'])
}