Javascript 如何在nodejs mongodb本机驱动程序中将字符串转换为ObjectId?

Javascript 如何在nodejs mongodb本机驱动程序中将字符串转换为ObjectId?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在一个nodejs环境中使用,我需要将id字符串转换为在我的更新查询中使用它,我如何才能做到这一点?使用() 如果您有一个表示BSON ObjectId的字符串(例如从web请求接收),则需要将其转换为ObjectId实例: const {ObjectId} = require('mongodb'); // or ObjectID // or var ObjectId = require('mongodb').ObjectId if node version < 6 const u

我正在一个
nodejs
环境中使用,我需要将
id
字符串转换为在我的更新查询中使用它,我如何才能做到这一点?

使用()

如果您有一个表示BSON ObjectId的字符串(例如从web请求接收),则需要将其转换为ObjectId实例:

const {ObjectId} = require('mongodb'); // or ObjectID 
// or var ObjectId = require('mongodb').ObjectId if node version < 6

const updateStuff = (id, doc) => {
  // `ObjectId` can throw https://github.com/mongodb/js-bson/blob/0.5/lib/bson/objectid.js#L22-L51, it's better anyway to sanitize the string first
  if (!ObjectId.isValid(s)) {
    return Promise.reject(new TypeError(`Invalid id: ${id}`));
  }
  return collection.findOneAndUpdate(
    {_id: ObjectId(id)}, 
    {$set: doc}, 
    {returnOriginal: false}
  );
};
const{ObjectId}=require('mongodb');//或对象
//或者var ObjectId=require('mongodb')。如果节点版本<6,则为ObjectId
const updateStuff=(id,doc)=>{
//“ObjectId”可以扔https://github.com/mongodb/js-bson/blob/0.5/lib/bson/objectid.js#L22-L51,无论如何,最好先清理字符串
如果(!ObjectId.isValid){
return Promise.reject(新类型错误(`Invalid id:${id}`));
}
return collection.findOneAndUpdate(
{u id:ObjectId(id)},
{$set:doc},
{returnOriginal:false}
);
};
正如@caubub所说的,这对我不起作用

但是当我使用
var ObjectID=require('mongodb').ObjectID;//在mongodb中将字符串转换为ObjectID
,然后我就可以在nodejs mongodb本机驱动器中将字符串转换为ObjectID


参考访问

,您可以在一个收费管道中使用
$toObjectId
,如下所示:

db.CollectionWithStringId.aggregate([
{$addFields: {
    _id: { $toObjectId: "$_id" }
}}
])


来源:

谢谢,我的用例你说得对。但如果我在客户端生成
\u id
,是否需要检查其在我的集合中的唯一性?我认为检查比服务器端的类型转换更昂贵,您认为呢?docs.mongodb.org/manual/reference/method/db.collection.insert中的“如果值不唯一,插入将失败”,我不知道每个方法的性能,但objectid只是24字节的散列,这取决于您的实现您好,@caub谢谢你宝贵的回答。我是Angular 2/4和MongoDb的新手。在我的应用程序中,我使用Angular 2、环回和MongoDb。我不确定这段代码应该添加到哪里!!它应该添加到Angular typescript文件还是环回服务器文件中?你能在这方面指导我吗。此时此刻我完全陷入困境。如果我在typescript文件中添加此代码,则会出现以下错误:未找到模块:错误:无法解析“mongodb”此逻辑在服务器上,它使用的是驱动程序包(仅限nodejs)@PrasadKaiche
ObjectId
,但如果您这样做,请注意如何生成这些ID,以确保它们尽可能唯一。要澄清,ES6对象分解(
{ObjectID}=require…
)仅适用于节点版本6.0及以上,旧版本需要旧语法。不推荐使用ObjectID(大写“D”)。改为使用ObjectId(小写“d”)。(来源:
@types/bson
软件包)
db.CollectionWithStringId.aggregate([
{$addFields: {
    _id: { $toObjectId: "$_id" }
}}