mongoDB: как сделать запрос на основе ObjectId, чтобы разделить данные на несколько каналов? - PullRequest
2 голосов
/ 04 апреля 2011

В моей коллекции 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 .

Другие предложения все еще приветствуются

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Может быть, не совсем то, что вы ищете, но, надеюсь, очень близко ...

db.mycollection.find({_id: {$gte: new ObjectId("4d99b27d368394f613002472")}})
0 голосов
/ 04 апреля 2011

Итак, если вы хотите воспользоваться преимуществами автоматического разделения в MongoDB, прочитайте следующее

http://www.mongodb.org/display/DOCS/Sharding+Introduction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...