是否可以将mongo objectId转换为字符串。
上面的图片显示了我收到并在console中显示的数据。我需要字符串形式的id值。但是ObjectId作为对象返回
在数据库中,id看起来像这样 - 565d3bf4cefddf1748d1fc5e -objectId,我需要id就像这样 -
答案 0 :(得分:2)
根据Mongo文件:
您可以在此处查看: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)
会将此反序列化为普通对象。