繁体   English   中英

MongoDB Java驱动程序:如何从Java驱动程序插入任何集合

[英]MongoDB Java Driver: How to insert into any collection from Java Driver

我有一个面向应用程序的客户端,其函数接收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.runco​​mmand(string),它可以接受insert / find / findone()以字符串形式传入的内容。 我可以使用runco​​mmand获取集合名称,所以我在基本级别上了解它,但不能将特定命令应用于任何用户定义的集合。

样品:

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);

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

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

关于你的评论“我发现已有预定义集合的例子,但我需要抽象它。”,@ mert是正确的,你可以使用以下方法获得你需要的集合:

DBCollection coll = db.getCollection(collection);

其中collection是在foo方法中声明的String变量。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM