В моей коллекции mongoDB есть такие записи, как:
{ "_id" : ObjectId("4d99b276368394f5130022fc") }
{ "_id" : ObjectId("4d99b276368394f5130022fd") }
{ "_id" : ObjectId("4d99b276368394f5130022fe") }
{ "_id" : ObjectId("4d99b276368394f5130022ff") }
{ "_id" : ObjectId("4d99b27d368394f613002470") }
{ "_id" : ObjectId("4d99b27d368394f613002471") }
{ "_id" : ObjectId("4d99b27d368394f613002472") }
Поскольку последние байты объекта BSI более или менее последовательны, я намерен разделить
их в нескольких каналах, например «Завершение с определенной буквой ObjectId».
(эквивалент RLIKE в MySql).
Поскольку objectIds являются байтами, а не строками, мое регулярное выражение, похоже, не работает.
Я пробовал что-то вроде:
db.myColl.findOne( { "_id" : /b$/ } , { "_id":1} )
null
> db.myColl.findOne( { "_id" : /^4/ } , { "_id":1} )
null
Есть предложения разделить мои данные на основе objectId? как последняя буква objectId
или что-то еще, что дает более или менее равное распределение?
EDIT:
Я нашел один способ, который работал для меня:
db.myColl.findOne({ $where: "this._id.toString()[23] == 1" } ) // gives me records with ObjectId ending with 1 .
Другие предложения все еще приветствуются