我是否必须拥有一个域对象来查询mongodb
?
如果我只想显示一些原始数据怎么办?从我的控制器查询mongodb
的语法是什么?
我试过
"def var = db.nameOfMyCollection.find()"
但它在我的控制器类中没有说db这样的属性。
我知道我的应用程序正在连接到数据库,因为我正在监视mongo server
日志,并且当我启动grails应用程序时,它会将连接数增加一个。
答案 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'])
}