我是一名有帮助的助手,以下是您需要翻译的内容:
文档中的
对于这个特定的系统,这些文档中的
我一直在学习MongoDB,了解到强烈建议在插入文档时完全构建文档结构(预分配),这样对该文档未来的更改就不需要将文档移动到磁盘上。在使用$addToSet或$push时是否适用相同规则?
例如,假设我有以下文档:
"_id" : "rsMH4GxtduZZfxQrC",
"createdAt" : ISODate("2015-03-01T12:08:23.007Z"),
"market" : "LTC_CNY",
"type" : "recentTrades",
"data" : [
{
"date" : "1422168530",
"price" : 13.8,
"amount" : 0.203,
"tid" : "2435402",
"type" : "buy"
},
{
"date" : "1422168529",
"price" : 13.8,
"amount" : 0.594,
"tid" : "2435401",
"type" : "buy"
},
{
"date" : "1422168529",
"price" : 13.79,
"amount" : 0.594,
"tid" : "2435400",
"type" : "buy"
}
]
我正在使用以下命令之一向data
字段添加新的对象数组(newData
):
$addToSet用于在数组末尾添加:
Collection.update(
{ _id: 'rsMH4GxtduZZfxQrC' },
{
$addToSet: {
data: {
$each: newData
}
}
}
);
使用$push(带有$position参数)将元素添加到数组的前面:
Collection.update(
{ _id: 'rsMH4GxtduZZfxQrC' },
{
$push: {
data: {
$each: newData,
$position: 0
}
}
}
);
文档中的
data
数组会因为从newData
添加的新对象而增长。那么这种类型的文档更新是否会导致文档在磁盘上移动?对于这个特定的系统,这些文档中的
data
数组可以增长到75k个对象以上。如果每次$addToSet或$push更新后这些文档确实被移动到磁盘上,那么应该在插入时定义带有75k个null值的文档(data: [null,null...null]
),然后随着时间的推移使用$set替换值吗?谢谢!
data
字段,它是一个不断增长的数组。一旦该数组增长到75k个对象,我就会插入一个具有相同结构的新文档,并开始进行添加操作。因此,我积累了许多长度为75k对象的文档。之所以选择75k是因为由于这种特定的对象大小,75k个对象等于大约7.5MB的文档大小,我不想接近16MB的硬限制,以避免控制台警告。也许您还可以告诉我这种方法是否正确? - Jon Cursi