如何从groovy / grails查询mongodb?

2 grails mongodb

我必须要查询一个域对象mongodb吗?

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

我试过了

"def var = db.nameOfMyCollection.find()"
Run Code Online (Sandbox Code Playgroud)

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

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

Swa*_*ant 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我们可以在控制器或其他服务中使用此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()
         }

    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅mongodb java docs。