我正在尝试使用mongodb扩展json更新ObjectId。
我正在使用下面的插入文档。
collection.insertMany([{ parentQueryGroupId: { $oid :
"628fadb4d370987ac789c0cd" } }])
所以它像parentQueryGroupId: { $oid : "628fadb4d370987ac789c0cd"
那样存储
但是我需要将它存储为ObjectId("628fadb4d370987ac789c0cd")
是否可以直接通过扩展JSON实现?问题是,服务器端查询是通用的。所以我从客户端发送数据,然后直接传递id给更新。但我需要它是ObjectId而不是对象
我可以在这种情况下循环,如果有$oid
键存在,那么我可以将其转换为ObjectId
,但这是由Mongoose或MongoDB原生支持的吗?
我使用bson
包中的EJSON
将其转换为如下所示的适当格式。
import { EJSON } from 'bson';
collection.insertMany(EJSON.deserialize([{ parentQueryGroupId: { $oid :
"628fadb4d370987ac789c0cd" } }]))
console.log(EJSON.deserialize([{ parentQueryGroupId: { $oid :
"628fadb4d370987ac789c0cd" } }])) // Outputs similar to: [{ parentQueryGroupId: ObjectId("628fadb4d370987ac789c0cd") }]
如果它不是扩展json,它就没有问题。在没有扩展类型的情况下也能很好地工作(除非你真的想要存储这些$oid
格式,因为反序列化也会转换它们)。
你可以试试这个
const mongoose = require('mongoose');
const ObjectId = mongoose.Types.ObjectId;
collection.insertMany([{ parentQueryGroupId: {ObjectId("628fadb4d370987ac789c0cd")} }])