我编写了将对象序列化为JSON和BSON的代码.根据我的输出,生成的BSON的大小比JSON大.这是预期的吗?
从我的代码Bson.class(使用杰克逊和bson4jackson)
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private BsonFactory fac = new BsonFactory();
private ObjectMapper mapper = new ObjectMapper(fac);
public Bson(Object obj) throws JsonGenerationException,
JsonMappingException, IOException {
mapper.writeValue(baos, obj);
}
public int size() {
return baos.size();
}
public String toString() {
byte[] bytes = baos.toByteArray();
return new String(bytes);
}
Run Code Online (Sandbox Code Playgroud)
从我的 Json.class
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private ObjectMapper mapper = new ObjectMapper();
public Json(Object obj) throws JsonGenerationException,
JsonMappingException, IOException {
mapper.writeValue(baos, obj);
}
Run Code Online (Sandbox Code Playgroud)
(size()和 …
我正在考虑一个处理消息应用程序的良好文档结构.
我基本上需要三种(或四种)对象:
我的想法是将联系人嵌入到用户文档中并将消息嵌入到对话文档中:
1.用户
{
username: 'dev.puS',
usernameCanonical: 'dev.pus', // used for unique constraints
email: 'developement.pus@gmail.com,
emailCanonical: 'developement.pus@gmail.com,
salt: 'some hash',
password: 'hash with salt',
logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 },
state: { online: true, available: false },
contacts: [ user_id1, user_id2, user_id3 ]
}
Run Code Online (Sandbox Code Playgroud)
2.会话
{
members: [ user_id1, user_id2 ],
messages: [
{ author: user_2, body: 'Hi what's up' },
{ author: user_1, body: 'Nothing out here :(' },
{ author: user_2, body: …Run Code Online (Sandbox Code Playgroud) 我想将MongoDB的BSON转储转换为JSON.
要做到这一点,我正在使用Mongo提供的bsondump工具,但我得到的输出如下:
{ "_id" : ObjectId( "5316d194b34f6a0c8776e187" ), "begin_date" : Date( 1394004372038 ), "foo" : "bar" }
{ "_id" : ObjectId( "5316d198b34f6a0c8776e188" ), "begin_date" : Date( 1394004407696 ), "foo" : "bar" }
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何以人类可读的格式显示日期(例如hh:mm:ss dd/mm/yyyy)?
编辑
看起来更新版的mongodump输出日期为:
{ "_id" : ObjectId( "5316d194b34f6a0c8776e187" ), "begin_date" : {"$date":"2015-11-11T08:45:03.974Z"}}, "foo" : "bar" }
Run Code Online (Sandbox Code Playgroud)
所以这个问题不再适用了.感谢大家的帮助.
我正在尝试将对象存储在MongoDB数据库中(使用MongoDB 3.0.2)并CodecConfigurationException在尝试使用错误消息对对象进行编码时获取
Can't find a codec for class java.time.LocalDate.
Run Code Online (Sandbox Code Playgroud)
我已经编写并包含了LocalDate对象的编解码器.细节如下.
DutyBlock我试图存储的对象具有以下成员变量:
public class DutyBlock {
private LocalDate startDate;
private LocalDate endDate; //Inclusive
private int blockLength;
private double pointValue;
private ArrayList<Ra> assigned;
}
Run Code Online (Sandbox Code Playgroud)
我编写了以下编解码器来编码DutyBlock数据库中的对象:
public class DutyBlockCodec implements Codec<DutyBlock> {
@Override
public void encode(BsonWriter writer, DutyBlock t, EncoderContext ec) {
Document document = new Document();
document.append("startDate", t.getStartDate());
document.append("endDate", t.getEndDate());
document.append("blockLength", t.getBlockLength());
document.append("pointValue", t.getPointValue());
document.append("assigned", t.getRasOnDuty());
writer.writeString(document.toJson()); //Line 27 in the error message.
}
@Override …Run Code Online (Sandbox Code Playgroud) 所以我试图启动我的节点应用程序,但我的MongoDB安装有一些错误.
以下是我的开发环境的规范:
node => 0.10.33(从nodejs.org安装)
npm => 1.4.28(从nodejs.org安装)
git => 2.1.3(自制)
mongodb => 2.6.5(自制)
如果它有所作为,我也使用Mean Stack Skeleton作为教程的一部分.
简而言之,当我尝试使用我的节点应用程序时$ node app.js,我得到以下反馈:
USER$ npm install mongoose
> kerberos@0.0.4 install /Users/USER/APP/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)
CXX(target) Release/obj.target/kerberos/lib/kerberos.o
CXX(target) Release/obj.target/kerberos/lib/worker.o
CC(target) Release/obj.target/kerberos/lib/kerberosgss.o
CC(target) Release/obj.target/kerberos/lib/base64.o
CXX(target) Release/obj.target/kerberos/lib/kerberos_context.o
SOLINK_MODULE(target) Release/kerberos.node
SOLINK_MODULE(target) Release/kerberos.node: Finished
> bson@0.2.15 install /Users/USER/APP/node_modules/mongoose/node_modules/mongodb/node_modules/bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)
CXX(target) Release/obj.target/bson/ext/bson.o
SOLINK_MODULE(target) Release/bson.node
SOLINK_MODULE(target) Release/bson.node: Finished
mongoose@3.8.18 node_modules/mongoose …Run Code Online (Sandbox Code Playgroud) 所以我从MongoDB转储中获得了大量的.bson.我在命令行上使用bsondump,将输出作为stdin传递给python.这成功地从BSON转换为'JSON',但它实际上是一个字符串,看似不合法的JSON.
例如,传入的行看起来像这样:
{ "_id" : ObjectId( "4d9b642b832a4c4fb2000000" ),
"acted_at" : Date( 1302014955933 ),
"created_at" : Date( 1302014955933 ),
"updated_at" : Date( 1302014955933 ),
"_platform_id" : 3,
"guid" : 72106535190265857 }
Run Code Online (Sandbox Code Playgroud)
我相信的是Mongo Extended JSON.
当我读到这样一行并做:
json_line = json.dumps(line)
Run Code Online (Sandbox Code Playgroud)
我明白了:
"{ \"_id\" : ObjectId( \"4d9b642b832a4c4fb2000000\" ),
\"acted_at\" : Date( 1302014955933 ),
\"created_at\" : Date( 1302014955933 ),
\"updated_at\" : Date( 1302014955933 ),
\"_platform_id\" : 3,
\"guid\" : 72106535190265857 }\n"
Run Code Online (Sandbox Code Playgroud)
哪个还是<type 'str'>.
我也试过了
json_line = json.dumps(line, default=json_util.default)
Run Code Online (Sandbox Code Playgroud)
(请参阅pymongo …
已知信息:已知 MongoDB存储在BSON(二进制JSON)中,最大BSON文档大小为16MB.
问题:为什么16MB本身为什么不是32MB或64MB或者更多,并且确切地限制了16MB以及依赖于16MB的原因是什么?
提到在传输过程中,不会消耗过多的带宽,并且不需要服务器上过多的RAM.但是,如果我们能够承受网络带宽和RAM内存消耗,该怎么办?那么,除了GridFS之外,我们没有任何选择.为什么?
这可能听起来很愚蠢.但请有人能对此有所启发吗?
我们可以通过发出以下命令在Mongo Shell上查看它
db.isMaster().maxBsonObjectSize/(1024*1024)
Run Code Online (Sandbox Code Playgroud)
为什么DBA不允许这样做?
在MongoDB中执行类似db.mycollection.find()返回集合中所有文档的操作.
使用包labix.org/v2/mgo在GoLang工作时我做了例如:
query := db.C("client").Find();
Run Code Online (Sandbox Code Playgroud)
它抱怨它需要以界面的形式输入.我需要做的就是检索所有文档并迭代它们并显示每个文档.我该如何达到这个效果?我见过的所有例子似乎都有过滤器.
我无法使用Flask,MongoDB和Python来使用简单的Hello World应用程序.尝试从bson模块导入时,该应用程序正在轰炸.所有模块都已成功安装pip,我正在运行virtualenv,所以我不知道为什么我收到错误:ImportError: cannot import name BSON
这是我的示例应用代码:
import os
from flask import Flask
from flask import g
from flask import jsonify
from flask import json
from flask import request
from flask import url_for
from flask import redirect
from flask import render_template
from flask import make_response
import pymongo
from pymongo import Connection
from bson import BSON
from bson import json_util
app = Flask(__name__)
@app.route('/')
def hello():
connection = Connection()
# Get your DB
db …Run Code Online (Sandbox Code Playgroud) 我花了很多时间寻找答案......这在PHP中很容易,但我不能把它放在C#中(我是C#和mongo的新手......)我正在尝试迭代存储文档的所有级别.该文件如下:
{
"_id": ObjectId("51f90101853bd88971ecdf27"),
"fields": [
{
"ID": ObjectId("51fd09498b080ee40c00514e"),
"NAME": "ID",
"TYPE": "Text"
},
{
"ID": ObjectId("51fd09a68b080ee40c0064db"),
"NAME": "Title",
"TYPE": "Text"
},
{
"ID": ObjectId("51fd09b28b080ee40c004d31"),
"NAME": "Start Date",
"TYPE": "Date"
},
{
"ID": ObjectId("51fd09c28b080ee40c007f2e"),
"NAME": "Long Description",
"TYPE": "Memo"
}
],
"name": "TODB",
"updated": "Wed Jul 31 2013 08:20:17 GMT-0400 (Eastern Daylight Time)"
}
Run Code Online (Sandbox Code Playgroud)
我访问"名称"和"更新"没有问题,但无法弄清楚如何访问"字段"数组.
代码到目前为止:
{
MongoServer mongo = MongoServer.Create();
mongo.Connect();
var db = mongo.GetDatabase("forms");
mongo.RequestStart(db);
var collection = db.GetCollection("forms");
var query = new QueryDocument("name",
"TODB");
mongo.Disconnect();
}
@foreach(BsonDocument …Run Code Online (Sandbox Code Playgroud)