Node.js Mongoose.js字符串转换为ObjectId函数


174

是否有使用mongoose将字符串转换为node中的objectId的功能?该模式指定某事是一个ObjectId,但是当它从字符串保存时,mongo告诉我它仍然只是一个字符串。例如,对象的_id显示为objectId("blah")

Answers:


419

您可以这样做:

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

是的,在这种情况下,这会更清洁一些。如果执行fromTime(),则可能只需要使用mongo.BSONPure
天才的

3
如果它是无效的字符串,这会引发错误吗?寻找在REST API中对mongo id字段进行输入验证的最佳方法。
Zambonilli

1
并不能真正回答问题,因为使用此方法,字符串将被转换,并且与原始字符串不同。
ed209

mongoose.Types.ObjectId(id)但我的ID未定义,那么它将返回什么?新的ID或错误
Keval布哈特

@KevinDente我正在将Nodejs与Typescript一起使用,我已经尝试了您的解决方案,但仍然得到一个字符串,并且我的查询未返回应返回的内容。关于如何在打字稿上做任何想法?
SOufiane Fadil '18

9

您可以这样做:

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

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


1
好吧,似乎更多的“新”标准似乎是
mongoose.mongo.BSONPure.ObjectID.createFromHexString

1
对于那些尝试执行此操作的用户,这是一个比所选答案好得多的答案,因为如果您已经在使用mongo ID,它将不会转换ID。
ed209

1
这不再有效,请改用接受的答案
paper1111

BSONPure不是mongoose.mongo我的一部分。有人可以确认吗?
阿图尔·塔吉索

5

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

mongoose.mongo.BSONPure.ObjectID.isValid

要么

mongoose.Types.ObjectId.isValid

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

3
您能否评论mongoose.Types.ObjectId和之间的区别mongoose.mongo.ObjectId?猫鼬的对象属性不同,但是它们可能在下面引用相同的方法。请评论Typesvs 的基本方法mongo
蒸汽动力

5

我无法解析此方法(很久没搜索了)

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);
}

3

您也可以使用

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

这是最简单的方法


0

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

....
exports.AddSomething = (req,res,next) =>{
  const newSomething = new SomeEntity({
 _id:new mongoose.Types.ObjectId(), //its very own ID
  somethingName:req.body.somethingName,
  theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...

希望能帮助到你

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.