mongoDB:如何基于ObjectId进行查询,将数据分成多个通道?

时间:2011-04-04 12:08:59

标签: mongodb

我的mongoDB集合有一些记录,如:

{ "_id" : ObjectId("4d99b276368394f5130022fc") }
{ "_id" : ObjectId("4d99b276368394f5130022fd") }
{ "_id" : ObjectId("4d99b276368394f5130022fe") }
{ "_id" : ObjectId("4d99b276368394f5130022ff") }
{ "_id" : ObjectId("4d99b27d368394f613002470") }
{ "_id" : ObjectId("4d99b27d368394f613002471") }
{ "_id" : ObjectId("4d99b27d368394f613002472") }

由于BSON objectId的最后一个字节或多或少是连续的,我打算分开 它们在多个通道中,例如“使用ObjectId的特定字母结束”。

(相当于MySql中的RLIKE)。 由于objectIds是字节而不是字符串,我的正则表达式似乎不起作用。 我试过像:

 db.myColl.findOne( { "_id" : /b$/ } , { "_id":1} )
null
> db.myColl.findOne( { "_id" : /^4/ } , { "_id":1} )
null

基于objectId对数据进行分区的任何建议?喜欢objectId的最后一个字母 或其他能给出或多或少平等分配的东西?

编辑: 我发现了一种对我有用的方法:

db.myColl.findOne({ $where: "this._id.toString()[23] == 1" } ) // gives me records with ObjectId ending with 1 .

仍欢迎其他建议

2 个答案:

答案 0 :(得分:1)

也许不是你想要的,但希望非常接近......

db.mycollection.find({_id: {$gte: new ObjectId("4d99b27d368394f613002472")}})

答案 1 :(得分:0)

因此,如果您想利用MongoDB中的自动分片功能,请阅读以下内容

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