ChatGPT解决这个技术问题 Extra ChatGPT

Node.js Mongoose.js 字符串到 ObjectId 函数

是否有使用猫鼬将字符串转换为节点中的 objectId 的功能?架构指定某物是一个 ObjectId,但是当它从字符串中保存时,mongo 告诉我它仍然只是一个字符串。例如,对象的 _id 显示为 objectId("blah")


K
Kevin Dente

你可以这样做:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');

如果它是无效字符串,这会引发错误吗?寻找在 REST API 中对 mongo id 字段进行输入验证的最佳方法。
并没有真正回答这个问题,因为使用这种方法,字符串将被转换并且与原始字符串不同。
@KevinDente我正在使用Nodejs和Typescript,我已经尝试过你的解决方案,但仍然得到一个字符串,我的查询没有返回它应该返回的内容。关于如何在打字稿上做到这一点的任何想法?
似乎可以使用常见的 js 要求,但使用 es6 import mongoose from 'mongoose'; 似乎不起作用。 Argument of type 'import("mongoose").Types.ObjectId' is not assignable to parameter of type 'import("mongoose").Schema.Types.ObjectId'.。其他人得到这个?
借调@Stretch0。不适用于 es6 和 typescript。
A
Ash18

你也可以用这个

const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");

这是最简单的方法


A
A T

你可以这样做:

var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");

编辑:新标准有 fromHexString 而不是 fromString


好吧,更“新”的标准似乎是 mongoose.mongo.BSONPure.ObjectID.createFromHexString() (从 mongoose 3.9.7 开始)
对于那些试图这样做的人来说,这是一个比所选答案更好的答案,因为如果您已经在使用 mongo id,它不会转换 id。
这不再有效,请改用接受的答案
BSONPure 对我来说不是 mongoose.mongo 的一部分。有人可以确认吗?
A
A T

从评论来看,您正在寻找:

mongoose.mongo.BSONPure.ObjectID.isValid

或者

mongoose.Types.ObjectId.isValid

s
steampowered
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");

您能评论一下 mongoose.Types.ObjectIdmongoose.mongo.ObjectId 之间的区别吗? mongoose 的对象属性不同,但它们可能在下面引用相同的方法。请评论 Typesmongo 的基础方法。
B
Billy Jake O'Connor

我无法解决这个方法(诚然我没有搜索很长时间)

mongoose.mongo.BSONPure.ObjectID.fromHexString

如果您的架构期望属性为 ObjectId 类型,则转换是隐式的,至少在 4.7.8 中似乎是这种情况。

但是,您可以使用这样的东西,它提供了更多的灵活性:

function toObjectId(ids) {

    if (ids.constructor === Array) {
        return ids.map(mongoose.Types.ObjectId);
    }

    return mongoose.Types.ObjectId(ids);
}

M
Manoj Kumar

如果您通过 express 和 mongoose 实现 REST API,只需查看以下代码片段。 (添加示例)

....exports.AddSomething = (req,res,next) =>{ const newSomething = new SomeEntity({ _id:new mongoose.Types.ObjectId(), //它自己的 ID somethingName:req.body.somethingName, theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// 如果要传递对象ID }) } ...

希望能帮助到你


V
Vanderson Andrade

如果你想使用模式

const yourSchemma = new Schema({
"customerId": {
    type: mongoose.Types.ObjectId,
    required: true
}

});