MongoDB通过Java存储JSON字符串

MongoDB通过Java存储JSON字符串,java,json,mongodb,bson,Java,Json,Mongodb,Bson,有多个教程,如和,它描述了使用返回DBObject的JSON.parse方法保存JSON数据。虽然它是保存JSON数据的非常简单和简单的方法,但我想知道的是,为什么需要解析JSON?我不能直接将JSON字符串保存到Mongo而不进行解析,我看到Mongo shell可以做到这一点 我问这个问题的原因是因为我有成堆的数千个文档,不解析数据可以节省时间 简言之,在某些驱动程序中是否有如下形式的java方法 Collection coll = new Collection("mycollection"

有多个教程,如和,它描述了使用返回DBObject的JSON.parse方法保存JSON数据。虽然它是保存JSON数据的非常简单和简单的方法,但我想知道的是,为什么需要解析JSON?我不能直接将JSON字符串保存到Mongo而不进行解析,我看到Mongo shell可以做到这一点

我问这个问题的原因是因为我有成堆的数千个文档,不解析数据可以节省时间

简言之,在某些驱动程序中是否有如下形式的java方法

Collection coll = new Collection("mycollection");
coll.save("[{datakey1:dataval1},{datakey2:datavalue2},...]");

根据您的用例,如果插入DBObject列表,实际上会在mongodb中生成多个文档。对于MongoDB来说,这似乎是一个奇怪的用例,它可以这样存储:

{
   id: 507f191e810c19729de860ea,
   value: '[[{"hpisymptoms":"of days in past 2 weeks depression free?"},{"hpisymptoms":"*"}]]'
}

只有当您从未打算查询json数据时,才应该这样做,这正是Mongo擅长的。这听起来很像,因为json数据存储在RDBMS字段中。

MongoDB是BSON存储而不是json存储,控制台可以这样做,因为json和JS对象在语法上相似。我还想补充一点,将JSON解码到您的本地语言对象中,然后在没有任何实际验证的情况下将其保存下来,这只是要求被黑客攻击,这是破坏MongoDBs本地查询提供的任何注入保护的最糟糕方法。关于BSON,您是对的。另外,要保存的数据只是来自RDBMS系统的备份数据。没有使用者或“攻击者”来执行SQL或脚本注入。好吧,这样的情况应该不会太糟糕。但你需要先解码才能做到这一点,因为它是从你的RBDM导入的,你可能也想在这里使用批插入,它的性能比
save
好得多,所以要插入这样的字符串[[{“hpisymptoms”:“过去两周内没有抑郁症的天数?”},{“hpisymptoms”:“*”}],我必须解析它并将其加载到列表中吗?这些数据来自另一个已经用有效JSONI编码的RDM。我不相信有,因为MongoDB当然不是JSON,控制台之所以可以这样做是因为JSON遵循JS对象语法。一种简化的方法是通过终端中的批插入脚本(hmmmm maybeWell)来实现,该数据以常规列行格式存储在RDMS中,但在从一台服务器发送到另一台服务器的过程中,我们将其作为JSON进行编组。一旦接收端接收到数据,我们就必须在内存中对其进行解组。那么,您是否打算将Mongodb用作RDBMS的JSON缓存?我会称之为仓库,您说的是什么意思:“如果您从未打算查询JSON数据,您就应该这样做,这正是Mongo擅长的。”。?你的意思是,如果我的文档是JSON格式的,并且主要用于查询/搜索,那么我不应该使用MongoDB?我的意思是,将JSON存储为字符串字段不是很有用,因为它不允许您查询或聚合数据。应将其另存为嵌入对象。