【发布时间】:2014-01-31 07:45:54
【问题描述】:
我在nodejs 环境中使用mongodb native driver,我需要将id 字符串转换为ObjectId 以在我的更新查询中使用它,我该怎么做?
【问题讨论】:
标签: javascript node.js mongodb
我在nodejs 环境中使用mongodb native driver,我需要将id 字符串转换为ObjectId 以在我的更新查询中使用它,我该怎么做?
【问题讨论】:
标签: javascript node.js mongodb
当您有一个表示 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}
);
};
【讨论】:
_id,是否需要检查它在我的收藏中的唯一性?我认为检查比服务器端的类型转换更昂贵,你怎么看?
mongodb驱动包(仅限nodejs)
ObjectId 可能是 used on client or server 但如果这样做,请注意如何生成这些 ID,以确保它们尽可能独特
var {ObjectId} = require('mongodb'); // or ObjectID Not Working
@caubub 提到的对我不起作用。
但是当我在 mongodb 中使用 var ObjectID = require('mongodb').ObjectID; // convert string to ObjectID 时,我可以在 nodejs mongodb 本机驱动器中将字符串转换为 ObjectId。
参考访问http://mongodb.github.io/node-mongodb-native/2.2/api/ObjectID.html
【讨论】:
{ ObjectID } = require...) 仅适用于 Node 6.0 及以上版本,旧版本需要旧语法。
@types/bson包)
您可以在类似的聚合管道中使用$toObjectId:
db.CollectionWithStringId.aggregate([
{$addFields: {
_id: { $toObjectId: "$_id" }
}}
])
来源:https://docs.mongodb.com/manual/reference/operator/aggregation/toObjectId/
【讨论】: