I run MongoDB 4.0 on WiredTiger under Ubuntu Server 16.04 to store complex documents. There is an issue with one of the collections: the documents have many images written as strings in base64. I understand this is a bad practice, but I need some time to fix it.
Because of this some find
operations fail, but only those which have a non-empty filter or skip
. For example db.collection('collection').find({})
runs OK while db.collection('collection').find({category: 1})
just closes connection after a timeout. It doesn't matter how many documents should be returned: if there's a filter, the error will pop every time (even if it should return 0 docs), while an empty query always executes well until skip
is too big.
UPD: some skip
values make queries to fail. db.collection('collection').find({}).skip(5000).limit(1)
runs well, db.collection('collection').find({}).skip(9000).limit(1)
takes way much time but executes too, while db.collection('collection').find({}).skip(10000).limit(1)
fails every time. Looks like there's some kind of buffer where the DB stores query related data and on the 10000 docs it runs out of the resources. The collection itself has ~10500 docs. Also, searching by _id
runs OK. Unfortunately, I have no opportunity to make new indexes because the operation fails just like read
.
What temporary solution I may use before removing base64 images from the collection?