如何生成MongoDB ObjectID的字符串表示形式? (在shell中)

时间:2012-04-07 00:04:17

标签: string mongodb

在MongoDB shell中,如果我输入someDoc._id,Mongo会回复ObjectId(4f6b83af44c75956279e7777)之类的内容。该字符串是如何从ObjectId bytes

生成的

欢迎链接到javascript源代码,以及指向其他驱动程序源的链接。

1 个答案:

答案 0 :(得分:2)

看起来来自BSONElement::toString

case jstOID:
    s << "ObjectId('";
    s << __oid() << "')";
    break;

__oid()为您提供了mongo::OID<< operator次来电str

inline StringBuilder& operator<< (StringBuilder& s, const OID& o) { return (s << o.str()); }

并且只在原始字节上调用toHexLower

string str() const { return toHexLower(data, 12); }

最后,toHexLower执行此操作:

inline string toHexLower(const void* inRaw, int len) {
    static const char hexchars[] = "0123456789abcdef";

    StringBuilder out;
    const char* in = reinterpret_cast<const char*>(inRaw);
    for (int i=0; i<len; ++i) {
        char c = in[i];
        char hi = hexchars[(c & 0xF0) >> 4];
        char lo = hexchars[(c & 0x0F)];

        out << hi << lo;
    }

    return out.str();
}

字符串化不是在JavaScript中完成的,而是在C ++中完成的。

以上使用了MongoDB的2.0分支,但(当前)主分支是相同的(或几乎是这样)。