我有一长串文档要创建。当我创建它们时,我没有收到任何错误。
const docsJson =[some array of json of docs to create]
const orders = await MySchema.create(ordersJSON);
// orders.length returns the same number of docs as docsJson
但当我搜索新的文档时,只创建了一些。
const actualOrdersCreated = await MySchema.find({ _id: { $in: orders.map((p) => p._id) } });
// actualOrdersCreated.length returns less docs than in docsJson
这是什么原因造成的?
2条答案
按热度按时间b1payxdu1#
我认为你的数据太大了。最大BSON文档大小为16 MB。参考文献:https://www.mongodb.com/docs/manual/reference/limits/
niwlg2el2#
这是因为在一个Mongo数据库上有ttl(生存时间)索引,而在另一个数据库上没有。我在从数据库里复制文件。第一个数据库上的索引是:
但我使用的数据库有
expireAfterSeconds
。因此,Mongo删除了
expireAt
字段具有旧日期的新文档。为了修复它,我在脚本中运行了
await Order.syncIndexes();
。这将索引清除到[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
。这对我的目的来说很好。但索引与第一个数据库不同。PaidOn键不再是索引。我认为有帮助但没有的事
起初,我认为这个问题是由于
jsonDocs
的大尺寸造成的。我有一些对象,它们的字段包含用于图像的大型Base64字符串。这些是占位符,应该替换为图像的http URL。
在删除了Base64字符串之后,我就能够上传文档了。我认为这有帮助,但它只是加快了速度。Mongo需要1分钟才能结账过期的文档。