繁体   English   中英

如何在 nodejs 中将 MongoDb ObjectId(“uniqueid”) 序列化为 JSON?

[英]How serialize MongoDb ObjectId(“uniqueid”) to JSON in nodejs?

假设我们有一个查询构建器服务 B,它在调用时会输出 mongo db 查询。 此查询由服务 A 接收,并按原样使用 mongo db 官方 nodejs 驱动程序执行。

我如何发送类似的东西:

[{
  _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96"),
  phone: "666"
}, {
  _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2da2"),
  phone: "555"
}]

从服务 B 到服务 A?

编辑:

以下工作非常好:

var q = { _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96") };
const result = await this.db.collection("persons").find(q).toArray();

以下不起作用:

var q = { _id: { $oid: "5f3258cfbaaccedaa5dd2d96" } }
const result = await this.db.collection("persons").find(q).toArray();

现在,

var q = { _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96") };
JSON.stringify(q)

给你: {"_id":"5f3258cfbaaccedaa5dd2d96"}并且如果你把它传递给服务 A。你不能在服务 A 中使用它,如下所示:

  const result = await this.db.collection("persons").find(qStr).toArray();

或者作为,

  const result = await this.db.collection("persons").find(JSON.parse(qStr)).toArray();

有一个 MongoDB 称为“ 扩展 JSON ”的标准,它定义了如何在常规 JSON 中编码所有 BSON 数据类型。

它会变成这样

{ _id : {$oid: "5f3258cfbaaccedaa5dd2d96"} }

大多数 MongoDB 工具将能够与该格式相互转换。

你需要:

  • 将您的文档序列化为一端的扩展 json
  • 将您的文档从扩展的 json 反序列化为另一端的语言原生数据结构

有关如何序列化和反序列化的信息,请参阅https://github.com/mongodb/js-bson#node-no-bundling

您不能像您尝试做的那样,将扩展的 json 类型带注释的哈希提供给期望本机类型的驱动程序函数(基本上,除了专门解析扩展 json 的那些之外,它们都是所有类型)。

var q = { _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96") };
const serializedQ = BSON.serialize(q);
const deserializedQ = BSON.deserialize(serializedQ);    
const result = await this.db.collection("persons").find(deserializedQ).toArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM