我有一个面向客户端的应用程序,它有一个函数,它接受2个参数作为字符串,arg1是集合,arg2是函数,arg2是对象的散列
所以在Java中我有
foo(String collection, String object):/*and我有来自mongoDB驱动程序的db对象,我想要插入到的集合是"users“*/
MongoClient mongoClient = new MongoClient( "localhost" );
DB db = mongoClient.getDB("mydb");这就是我遇到麻烦的地方
db.runCommand({insert : collection (? can i do this),
????}) <- I dont know how to right this and append the object我之前做了一堆搜索,我找到的很多例子已经有了一个预定义的集合,但我需要对它进行抽象。
任何帮助都是非常有用的,谢谢。
更新:
我不是在寻找coll.find() java方法。我想用比shell提供的更好的输出来可视化某人的mongoDB数据。所以我正在寻找一个非常通用的字符串(db.runcommand),它可以接受作为字符串传入的insert/find/findone()。我可以使用runcommand获取集合名称,以便在基本级别上理解它,但不能将特定命令应用于任何用户定义的集合。
发布于 2013-07-18 05:26:42
示例:
DBCollection coll = db.getCollection("collection");
/* {
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : {
x : 203,
y : 102
}
} */
BasicDBObject doc = new BasicDBObject("name", "MongoDB").
append("type", "database").
append("count", 1).
append("info", new BasicDBObject("x", 203).append("y", 102));
coll.insert(doc);发布于 2013-08-11 17:12:54
这听起来就像是您在尝试编写自己的驱动程序-找出用户想要执行的命令,然后将其转换为BSON发送给MongoDB,这正是MongoDB Java驱动程序所做的事情。
您可以使用Java驱动程序和db.command(...)来运行任意命令。您必须创建一个DBObject来表示要运行的命令。
关于你的评论“我发现的示例已经有了一个预定义的集合,但我需要对它进行抽象”,@mert是正确的,因为你可以使用以下方法获得所需的集合:
DBCollection coll = db.getCollection(collection);其中collection是在foo方法中声明的字符串变量。
但是,我不确定您希望提供的功能的安全性-您基本上是提供了一个工具,让用户可以对您的数据库运行任意命令,虽然MongoDB是一个NoSQL数据库,但这样打开它会暴露出类似的SQL Injection攻击漏洞。你的用例到底是什么?您真的想绕过并重新发明驱动程序,以允许用户在数据库上做任何他们想做的事情吗?使用严格的API编写驱动程序有两个原因: 1)帮助开发人员;2)防止人们对数据库做不正确或令人讨厌的事情。
https://stackoverflow.com/questions/17708675
复制相似问题