覆盖数据与猫鼬
问题描述:
我有这样的事情:覆盖数据与猫鼬
Accounts.insertMany(topAccounts)
.then(function (result) {
console.log('Succesfully saved '+ result.length + ' documents... closing connection...')
mongoose.connection.close();
})
.catch(function(err){
console.log('oh shit');
console.log(err);
})
这所保存的数据追加到我的收藏。有什么方法可以覆盖它吗?保存数据之前删除集合是否是我的最佳解决方案?
答
我一直在这种情况下,但为种子初始数据库数据。我发现了两个不同的解决方案:
删除集合 -
model.collection.drop()
这是不是删除所有文件中收集了大量的更快多。 Mongoose会自动重新创建它,但我不认为它会自动确保创建索引。
注意:当我这样做时,似乎有一个没有立即下降的竞赛状况。如果我打电话,然后插入(如果我记得正确),我最终收集了一个空集。我只是在插入所有种子文档之前设置了1秒的超时时间,并且工作正常。删除所有文件 -
model.remove()
这是一个大集合很慢操作,因为它有每次删除文件时更新索引。
虽这么说,我不知道你是如何使用TopAccounts
但它似乎像你像一个名称 - 值对,其中名称是TopAccounts
处理它和值是TopAccounts数组。根据您使用这些帐户的方式,您可能需要考虑将所有TopAccounts存储在单个文档中 - 这甚至可以让您及时回溯并查看特定日期的最佳帐户。
你可以存储它是这样的,然后按日期查询:
{
"_id": ObjectId("..."),
"date": Date("2016-11-19"),
"top_accounts": [
{... top account #1 ...},
{... top account #2 ...},
{... top account #3 ...}
...
]
}
谢谢兰迪。我喜欢你关于让topAccounts在它自己的文档中有各自的日期的建议,但我会坚持重写,因为我不想在一两年内担心存储问题。我正在做'Model.remove({},callback)',它可以很快完成工作(集合中只有4950个文档)。但是知道'.remove()'和'.drop()'之间的区别对于较大的集合将非常方便。 – jgozal