通过Java执行像Query(JSON)这样的Mongo
我想知道是否有一种方法可以直接通过Java执行类似查询的mongo,即我们将mongoDB查询作为字符串传递给Java驱动程序中的函数,用于mongoDB作为String对象并返回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
实例的BasicDBObject
? 谢谢。
你在这里展示的不是JSON,它是嵌入式MongoDB Shell的Javascript代码。 如果由于某种原因需要在Java环境中执行代码,则必须嵌入Javascript引擎(如Rhino )并实现兼容的API。
否则,您只需要将JSON转换为DBObject
,您可以使用JSON.parse()方法或任何其他JSON映射库(如Jackson )执行此操作。 请注意,MongoDB使用JSON中不存在的扩展数据类型集: http : //www.mongodb.org/display/DOCS/Data+Types+and+Conventions
UPD:Scott Hernandez指出了JSON.parse
。
是的,通过将filter作为字符串传递,有办法。 例:
BasicDBObject query = BasicDBObject.parse("{userId: {$gt: \"1\"}}"); FindIterable dumps = crapCollection.find(query);
您也可以使用com.mongodb.util.JSON
,但我不推荐它。 它描述性较差。
DBObject dbObject = (DBObject)JSON.parse("{userId: {$gt: \"1\"}}");
请注意,这可能容易受到SQL注入攻击,因为您自己解析/构建filter。
我建议使用Jongo的参数化查询 。
看一下Jongo库 – 它允许您使用命令行语法运行甚至非常高级的查询。
它还使用非常快速的GSON映射器将您自己的对象作为查询结果返回给您,而不是BasicDBObjects列表。
我建议使用类似mongo-shell-query的实用程序(jar)。 它允许您使用与mongo命令shell相同的语法在java(或scala)代码中编写mongo查询。 更具体地说,您可以以字符串格式编写mongo查询。 它还支持聚合管道等高级function。 看看https://github.com/EqualExperts/mongo-shell-like-query
您可以按照教程中的示例进行操作:
http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery
注意他们使用(Basic)DBObject来创建查询,而不是字符串。