使用嵌套对象表示法查询mongoDB时遇到问题:
db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
5
Run Code Online (Sandbox Code Playgroud)
我看不出我做错了什么.我期望嵌套对象表示法返回与点表示法查询相同的结果.我哪里错了?
我似乎无法在MongoDB中使用最基本的日期查询.使用看起来像这样的文档:
{
"_id" : "foobar/201310",
"ap" : "foobar",
"dt" : ISODate("2013-10-01T00:00:00.000Z"),
"tl" : 375439
}
Run Code Online (Sandbox Code Playgroud)
一个看起来像这样的查询:
{
"dt" : {
"$gte" : {
"$date" : "2013-10-01T00:00:00.000Z"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从执行中得到0结果:
db.mycollection.find({
"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})
Run Code Online (Sandbox Code Playgroud)
知道为什么这不起作用吗?
作为参考,此查询由Spring的MongoTemplate生成,因此我无法直接控制最终发送到MongoDB的查询.
(PS)
> db.version()
2.4.7
Run Code Online (Sandbox Code Playgroud)
谢谢!
来自MongoDB的权威指南:
大于4MB的文档(转换为BSON时)无法保存到数据库中.这是一个有点武断的限制(将来可能会提出); 它主要是为了防止错误的架构设计并确保一致的性能.
我不明白这个限制,这是否意味着包含博客帖子的文档大量超过4MB并不能存储为单个文档?
这也计算嵌套文档吗?
如果我想要一个审核值变化的文档怎么办?(最终可能会增长,超过4MB限制.)
希望有人正确解释.
我刚刚开始阅读MongoDB(我正在学习的第一个nosql数据库).
谢谢.
最近我发现了MessagePack,这是Google的Protocol Buffers和JSON的替代二进制序列化格式,它也优于两者.
还有MongoDB用于存储数据的BSON序列化格式.
有人可以详细说明BSON与MessagePack的差异和优势吗?
只是为了完成高效的 二进制序列化格式列表:还有Gobs将成为Google协议缓冲区的继承者.然而,与所有其他提到的格式相比,这些格式不是语言无关的,并且依赖于Go的内置反射,至少还有除Go之外的其他语言的Gobs库.
我刚刚开始使用MongoDB,我注意到的一件事是它使用BSON在内部存储数据.但是,关于BSON是什么以及如何在MongoDB中使用它的文档并不完全清楚.有人可以向我解释一下吗?
有没有人有关于协议缓冲区与BSON(二进制JSON)或一般JSON的性能特征的任何信息?
这些似乎是用于HTTP的良好二进制协议.我只是想知道从长远来看哪个C#环境会更好.
这是我在BSON和Protocol Buffers上阅读的一些信息.
我有Java应用程序从外部应用程序获取数据.传入的JSON位于字符串中.我想解析字符串并创建BSON对象.
不幸的是,我无法在Java的BSON实现中找到API.
我是否像GSON一样使用外部解析器?
我正在比较JSON和BSON以序列化对象.这些对象包含多个具有大量整数的数组.在我的测试中,我序列化的对象包含大约12,000个整数的总数.我只对序列化结果的大小比较感兴趣.我使用JSON.NET作为执行序列化的库.我正在使用JSON,因为我也希望能够在Javascript中使用它.
JSON字符串的大小约为43kb,BSON结果的大小为161kb.因此差异系数约为4.这不是我的预期,因为我看了BSON,因为我认为BSON在存储数据方面更有效率.
所以我的问题是为什么BSON效率不高,能否提高效率?或者是否有另一种使用包含大量整数的数组序列化数据的方法,可以在Javascript中轻松处理?
您可以在下面找到测试JSON/BSON序列化的代码.
// Read file which contain json string
string _jsonString = ReadFile();
object _object = Newtonsoft.Json.JsonConvert.DeserializeObject(_jsonString);
FileStream _fs = File.OpenWrite("BsonFileName");
using (Newtonsoft.Json.Bson.BsonWriter _bsonWriter = new BsonWriter(_fs)
{ CloseOutput = false })
{
Newtonsoft.Json.JsonSerializer _jsonSerializer = new JsonSerializer();
_jsonSerializer.Serialize(_bsonWriter, _object);
_bsonWriter.Flush();
}
Run Code Online (Sandbox Code Playgroud)
编辑:
以下是生成的文件 https://skydrive.live.com/redir?resid=9A6F31F60861DD2C!362&authkey=!AKU-ZZp8C_0gcR0
我目前正在学习并将MongoDB应用于一个小型金融相关项目.
当我阅读MongoDB in Action时,它说:
BSON数字类型通常出现的唯一其他问题是缺少小数支持.这意味着如果您计划在MongoDB中存储货币值,则需要使用整数类型并将值保持为美分.
我的财务相关产品将涉及一些货币价值,但我有点困惑或担心上述声明.这是我的问题:
double用于currency values我项目中的那些人吗?double它们会发生什么或后果?you need to use an integer type and keep the values in cents?这是否意味着如果我要去商店1.34 dollars,那么我应该存储134 cents?谢谢
我编写了将对象序列化为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()和 …
bson ×10
json ×6
mongodb ×6
java ×2
.net ×1
bigdecimal ×1
c# ×1
comparison ×1
decimal ×1
isodate ×1
jackson ×1
javascript ×1
json.net ×1
messagepack ×1
msgpack ×1
nested ×1
nosql ×1
syntax ×1