有没有办法通过javascript / jquery将Mongo ObjectId转换为字符串

时间:2015-12-03 04:59:34

标签: javascript c#

enter image description here

enter image description here

是否可以将mongo objectId转换为字符串。

上面的图片显示了我收到并在console中显示的数据。我需要字符串形式的id值。但是ObjectId作为对象返回

在数据库中,id看起来像这样 - 565d3bf4cefddf1748d1fc5e -objectId,我需要id就像这样 -

2 个答案:

答案 0 :(得分:2)

根据Mongo文件:

  • 一个4字节的值,表示自Unix纪元以来的秒数,
  • 一个3字节的机器标识符,
  • 一个2字节的进程ID,
  • 一个3字节的计数器,以随机值开始。

您可以在此处查看:https://docs.mongodb.org/manual/reference/object-id/

所以在javascript中你可以做这样的事情。

var mId = {
    Timestamp:1448950573,
    Machine:13565407,
    Pid:1756,
    Increment:8888962
};

function getId(mongoId) {
    var result = 
        pad0(mongoId.Timestamp.toString(16), 8) +
        pad0(mongoId.Machine.toString(16), 6) +
        pad0(mongoId.Pid.toString(16), 4) +
        pad0(mongoId.Increment.toString(16), 6);

    return result;
}

function pad0(str, len) {
    var zeros = "00000000000000000000000000";
    if (str.length < len) {
        return zeros.substr(0, len-str.length) + str;
    }

    return str;
}

console.log(getId(mId))

它产生&#34; 565d3b2dcefddf06dc87a282&#34;这不完全是你的id,但这可能只是一个调整,或者我正在使用不同的数据:D。

修改
添加了填充功能,以便不截断零。

希望有所帮助

答案 1 :(得分:1)

编辑:

我假设您使用c#连接并提供来自mongo DB的文档。在这种情况下,有一个驱动程序也支持toString()

以下是使用mongo csharp driver

的示例
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;

// ...

string outputFileName; // initialize to the output file
IMongoCollection<BsonDocument> collection; // initialize to the collection to read from

using (var streamWriter = new StreamWriter(outputFileName))
{
    await collection.Find(new BsonDocument())
        .ForEachAsync(async (document) =>
        {
            using (var stringWriter = new StringWriter())
            using (var jsonWriter = new JsonWriter(stringWriter))
            {
                var context = BsonSerializationContext.CreateRoot(jsonWriter);
                collection.DocumentSerializer.Serialize(context, document);
                var line = stringWriter.ToString();
                await streamWriter.WriteLineAsync(line);
            }
        });
}

ORIGINAL:

这些是Mongo ObjectId's,如果您尚未对文档进行反序列化,则它们应支持将返回十六进制字符串的toString方法。

但如果您希望将此应用于整个文档,则使用JSON.stringify(MogoDocument)会将此反序列化为普通对象。