我在nodejs
环境中使用mongodb原生驱动程序,我需要将一个id
字符串转换为ObjectId以在我的更新查询中使用,我该怎么做?
使用ObjectId(nodejs驱动程序文档),当您有一个表示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}
);
};
var {ObjectId} = require('mongodb'); // or ObjectID Not Working
正如@caubub所说,对我没有用。
但是当我在mongodb中使用var ObjectID = require('mongodb').ObjectID; // 将字符串转换为ObjectID
,然后在nodejs mongodb原生驱动程序中能够将字符串转换为ObjectId。
有关参考,请访问http://mongodb.github.io/node-mongodb-native/2.2/api/ObjectID.html
{ ObjectID } = require...
)仅适用于Node 6.0及以上版本,旧版本需要使用旧语法。 - MacK@types/bson
包) - Hendy Irawan$toObjectId
,类似这样:db.CollectionWithStringId.aggregate([
{$addFields: {
_id: { $toObjectId: "$_id" }
}}
])
来源: https://docs.mongodb.com/manual/reference/operator/aggregation/toObjectId/
我的mongodb版本:4.9.1(nodejs)
你只需要:
import { Collection, ObjectId } from "mongodb";
然后,例如要删除文档,只需执行以下操作:
return await collection.deleteOne({ _id: new ObjectId(id)});
_id
,那么在我的集合中检查其唯一性是必需的吗?我认为这个检查比在服务器端进行类型转换更昂贵,你怎么看? - Nasser Torabzademongodb
驱动程序包(仅限于nodejs)。 - caubObjectId
单独可以在客户端或服务器上使用,但是如果您这样做,请注意如何生成这些 ID,以确保它们尽可能唯一。 - caub