我遇到了mongo的一个奇怪行为,我想澄清一下
我的要求很简单:我想获得集合中单个文档的大小。我找到了两种可能的解决方案:
在这里,我提供了一些我进行测试的代码:
>
我创建了一个新的数据库“test”,并输入了一个只有一个属性的简单文档:type:“auto”
db.test.insert({type:"auto"})
stats()函数调用的输出:db。测验stats():
{
"ns" : "test.test",
"count" : 1,
"size" : 40,
"avgObjSize" : 40,
"storageSize" : 4096,
"numExtents" : 1,
"nindexes" : 1,
"lastExtentSize" : 4096,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
bsonsize函数调用的输出:对象。bsonsize(db.test.find({test:“auto”}))
481
由于记录填充机制,文档在集合中的有效空间量将超过文档的大小。
这就是db的输出之间存在差异的原因。测验stats()
和对象。b大小(…)
。
要获得文档的确切大小(以字节为单位),请坚持使用
对象。bsonsize()
函数。
如果你有版本
您可以使用$bsonsize:
db.users.aggregate([
{
"$project": {
"size_bytes": { "$bsonSize": "$$ROOT" },
"size_KB": { "$divide": [{"$bsonSize": "$$ROOT"}, 1024] },
"size_MB": { "$divide": [{"$bsonSize": "$$ROOT"}, 1048576] }
}
}
])
如果你有版本
您可以使用此脚本获取实际大小:**
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
print('_id: '+obj._id+' || Size: '+size+'B -> '+Math.round(size/(1024))+'KB -> '+Math.round(size/(1024*1024))+'MB (max 16MB)');
});
注意:如果您的ID是64位整数,则上述内容将在打印时截断ID值!如果是这种情况,您可以使用:
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
var stats =
{
'_id': obj._id,
'bytes': size,
'KB': Math.round(size/(1024)),
'MB': Math.round(size/(1024*1024))
};
print(stats);
});
这也有返回JSON的好处,所以像RoboMongo这样的图形用户界面可以将其制表!
来源:https://stackoverflow.com/a/16957505/3933634
编辑:感谢@zAlbee您的建议完成。
在之前的Object.bsonsize()
调用中,MongoDB返回的是游标的大小,而不是文档的大小。
正确的方法是使用这个命令:
Object.bsonsize(db.test.findOne())
使用findOne()
,您可以定义对特定文档的查询:
Object.bsonsize(db.test.findOne({type:"auto"}))
这将返回特定文档的正确大小(以字节为单位)。
我是新的MongoDB,并试图从数据库检索单个文档的大小。 数据库名为“”集合名为“” 我试过: 我也尝试过: 但它只返回。如何获取文档的大小?非常感谢。
问题内容: 我搜索了这个问题,但找不到任何有用的答案。我想获取文档中每个单词的总数,例如,我的索引中有一些推文,并且有一条推文中写着这样的内容:“这里太无聊了,我想去我的家,甜蜜的家”。查询应返回如下响应: 有可能这样做吗? 问题答案: 您正在寻找利用分析仪的。这样做时,您可以定义所需的任何分析器,即阻止分析器将单词转换为根/普通形式。查看文档以获取更多详细信息。 在: 出:
我正在用db.coll.find拿一份文件。我想得到文件的大小字节使用nodejs只有mongo本地driver.can可能吗?
本文向大家介绍如何在MongoDB中获得不同的子文档字段值列表?,包括了如何在MongoDB中获得不同的子文档字段值列表?的使用技巧和注意事项,需要的朋友参考一下 若要获取不同的子文档字段值列表,可以使用dot(。)。语法如下- 为了理解这个概念,让我们用文档创建一个集合。使用文档创建集合的查询如下- 在method的帮助下显示集合中的所有文档。查询如下- 以下是输出- 这是获取子文档字段值的唯一
是否可以在MongoDB中找到最大的文档大小? 显示的是平均大小,这并不具有代表性,因为在我的例子中,大小可能会有很大差异。
我正在使用 azure cosmos DB 充当 MongoDB 版本 4.0.0.我需要使用蒙哥数据库 API 从 Azure Cosmos DB 获取 N 个随机文档。我尝试过使用$sample运算符,但每次我查询时,它都会以相同的顺序为我提供文档。 无论我运行这个查询多少次,我都会从集合中得到相同的文档。