我想知道是否有一种方法可以直接通过Java执行mongo like查询,即我们将mongoDB like查询作为字符串作为字符串提供给mongoDB的Java驱动程序中的函数,然后返回一个DBCursor对象。类似于:
import com.mongodb.*;
import java.net.UnknownHostException;
public class ExecuteQuery {
public static void main(String args[]){
try{
Mongo m = new Mongo();
DB db = m.getDB("test");
DBCollection coll = db.getCollection("first");
DBObject doc = new BasicDBObject();
DBCursor cur =coll.executeQuery("db.first.find({"username":"joe"})");
}
catch(UnknownHostException e){
System.out.println(e);
}
catch (MongoException.DuplicateKey e) {
System.out.println("Exception Caught" + e);
}
}
}注意:executeQuery()不是一个内置函数。它仅用于演示目的。那么,java api中是否有一个函数可以将json字符串转换为BasicDBObject实例呢?谢谢。
发布于 2011-02-01 19:21:18
这里展示的不是JSON,而是嵌入式MongoDB外壳的Javascript代码。如果你出于某种原因需要在Java环境中执行代码,你将不得不嵌入Javascript引擎(如Rhino)并实现兼容的应用程序接口。
否则,您只需要将JSON转换为DBObject,您可以使用JSON.parse()方法或任何其他JSON映射库(如Jackson )来完成此操作。注意,MongoDB使用了JSON:http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions中没有的一组扩展数据类型
UPD: Scott Hernandez指出了JSON.parse。
发布于 2016-09-15 21:04:56
是的,有办法,通过将过滤器作为字符串传递。示例:
BasicDBObject query = BasicDBObject.parse("{userId: {$gt: \"1\"}}");
FindIterable<Document> dumps = crapCollection.find(query);您也可以使用com.mongodb.util.JSON,但我不建议您这样做。它不太具有描述性。
DBObject dbObject = (DBObject)JSON.parse("{userId: {$gt: \"1\"}}");请注意,这可能容易受到SQL注入的攻击,因为您自己解析/构建过滤器。
我推荐使用Jongo's parameterized query。
发布于 2013-03-17 23:01:06
看一下Jongo library -它将允许您使用命令行语法运行非常高级的查询。
它还使用非常快速的GSON映射器将您自己的对象作为查询结果返回给您,而不是BasicDBObjects列表。
https://stackoverflow.com/questions/4860728
复制相似问题