我有一个面向应用程序的客户端,其函数接受2个参数作为字符串,arg1是集合,arg 2是函数,arg 2是对象的散列
所以在Java中我有
foo(String collection, String object):
/ *我从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方法。我希望可视化某些人的mongoDB数据,其输出比shell提供的更好。所以我正在寻找一个非常通用的db.runcommand(string),它可以接受insert / find / findone()以字符串形式传入的内容。我可以使用runcommand获取集合名称,所以我在基本级别上理解它,但不能将特定命令应用于任何用户定义的集合。
答案 0 :(得分:1)
样品:
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);
答案 1 :(得分:1)
这听起来几乎就像你正在尝试编写自己的驱动程序 - 确定用户想要做什么命令然后将其转换为BSON以发送到MongoDB正是MongoDB Java驱动程序所做的。
您可以使用db.command(...)
使用Java驱动程序运行任意命令。您必须创建一个表示要运行的命令的DBObject。
关于你的评论“我发现已经有一个预定义集合的例子,但我需要抽象它。”,@ mert是正确的,因为你可以使用你需要的集合:
DBCollection coll = db.getCollection(collection);
其中collection
是在foo
方法中声明的String变量。
但是,我不确定您希望提供的功能的安全性 - 您基本上提供了一个工具,让用户对您的数据库运行任意命令,尽管MongoDB是一个NoSQL数据库打开它像这样暴露了SQL Injection攻击的类似漏洞。你的用例究竟是什么?您是否真的想绕过并重新发明驱动程序以允许您的用户在数据库上做任何他们想做的事情?驱动程序使用严格的API编写,原因有两个:1)帮助开发人员; 2)防止人们对数据库做错误或讨厌的事情。