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

有没有办法通过javascript/jquery将Mongo ObjectId转换成字符串,javascript,c#,Javascript,C#,是否可以将mongo objectId转换为字符串 上面的图片显示了我在控制台中接收和显示的数据。我需要字符串形式的id值。但是ObjectId作为object返回 数据库中的id如下-565d3bf4cefddf1748d1fc5e-objectId,我需要的id与此完全相同–编辑: 我假设您正在使用c#连接到mongo DB并为其提供文档。在这种情况下,有一个驱动程序也支持 下面是一个使用的示例: 使用MongoDB.Bson; 使用MongoDB.Bson.IO; 使用MongoDB.Bs

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

上面的图片显示了我在控制台中接收和显示的数据。我需要字符串形式的id值。但是ObjectId作为object返回


数据库中的id如下-565d3bf4cefddf1748d1fc5e-objectId,我需要的id与此完全相同–

编辑:

我假设您正在使用c#连接到mongo DB并为其提供文档。在这种情况下,有一个驱动程序也支持

下面是一个使用的示例:

使用MongoDB.Bson;
使用MongoDB.Bson.IO;
使用MongoDB.Bson.Serialization;
使用MongoDB.Driver;
// ...
字符串输出文件名;//初始化为输出文件
IMongoCollection集合;//初始化到要从中读取的集合
使用(var streamWriter=newstreamwriter(outputFileName))
{
等待集合。查找(新BsonDocument())
.ForEachAsync(异步(文档)=>
{
使用(var stringWriter=new stringWriter())
使用(var jsonWriter=newjsonwriter(stringWriter))
{
var context=BsonSerializationContext.CreateRoot(jsonWriter);
collection.DocumentSerializer.Serialize(上下文,文档);
var line=stringWriter.ToString();
等待streamWriter.WriteLineAsync(行);
}
});
}
原件:

这些是Mongo,如果您还没有反序列化文档,它们应该支持一个返回十六进制字符串的方法


但是如果您想将其应用于整个文档,那么使用
JSON.stringify(MogoDocument)
应该将其反序列化为普通对象。

根据Mongo文档:

  • 一个4字节的值,表示自Unix纪元以来的秒数
  • 一个3字节的机器标识符
  • 2字节的进程id,以及
  • 以随机值开始的3字节计数器
您可以在这里查看:

因此,在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))
var-mId={
时间戳:1448950573,
电话:13565407,
Pid:1756,
增量:8888962
};
函数getId(mongoId){
var结果=
pad0(mongoId.Timestamp.toString(16),8)+
pad0(mongoId.Machine.toString(16),6)+
pad0(mongoId.Pid.toString(16),4)+
pad0(mongoId.Increment.toString(16,6));
返回结果;
}
函数pad0(str,len){
var zeros=“00000000000000000000”;
如果(长度小于长度){
返回零。substr(0,len-str.length)+str;
}
返回str;
}
console.log(getId(mId))
它生成的“565d3b2dcefddf06dc87a282”并不是您所拥有的id,但这可能只是一个调整,或者我正在处理不同的数据:D

编辑
添加了一个填充函数,这样零就不会被截断


希望这对您有所帮助

您使用什么来序列化json?json.net?您希望endIn数据库中的id是什么样的?id是这样的-565d3bf4cefddf1748d1fc5e-objectId,我需要与此完全相同的id谢谢verymuch,它可以工作90%,但有一个问题,这是我从函数565d3af1cefddf6dc87a281中得到的字符串,但实际上所有的objectid是565d3af1cefddf06dc87a281,14个位置有变化
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))