0

我有一个面向客户端的应用程序,其函数接受 2 个参数作为字符串,arg1 是集合,arg 2 是函数,arg 2 是对象的哈希

所以在Java中我有

foo(String collection, String object):

/*我有来自 mongoDB 驱动程序的 db 对象,我想插入的集合是“用户”*/

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.runco​​mmand(string),它可以接收作为字符串传入的任何内容的 insert/find/findone()。我可以使用 runco​​mmand 获取集合名称,因此我在基本层面上理解它,但不能将特定命令应用于任何用户定义的集合。

4

2 回答 2

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);
于 2013-07-17T21:26:41.547 回答
1

这听起来几乎就像您正在尝试编写自己的驱动程序 - 找出用户想要执行的命令,然后将其转换为 BSON 以发送到 MongoDB,这正是 MongoDB Java 驱动程序所做的。

您可以使用 Java 驱动程序运行任意命令,使用db.command(...). 您必须创建一个代表您要运行的命令的 DBObject。

关于您的评论“我发现的示例已经有一个预定义的集合,但我需要对其进行抽象。”,@mert 是正确的,因为您可以使用以下方法获取您需要的集合:

DBCollection coll = db.getCollection(collection);

您的方法collection中声明的 String 变量在哪里。foo

但是,我不确定您希望提供的功能的安全性 - 您基本上是在提供一个工具来让用户对您的数据库运行任意命令,尽管 MongoDB 是一个 NoSQL 数据库,但像这样打开它会暴露类似于SQL 注入攻击的漏洞。你的用例到底是什么?您真的想规避并重新发明驱动程序以允许您的用户在数据库上做任何他们想做的事情吗?驱动程序使用严格的 API 编写有两个原因:1)帮助开发人员;2)防止人们对数据库做不正确或讨厌的事情。

于 2013-08-11T09:12:54.077 回答