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

2q5ifsrm  于 2022-11-13  发布在  Go
关注(0)|答案(9)|浏览(302)

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

mhd8tkvw

mhd8tkvw1#

你可以这样做:

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

woobm2wo2#

您也可以使用此功能

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

这是最简单方法

zwghvu4y

zwghvu4y3#

您可以这样做:

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

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

0sgqnhkj

0sgqnhkj4#

从评论判断,您正在寻找:

mongoose.mongo.BSONPure.ObjectID.isValid

或者

mongoose.Types.ObjectId.isValid
nzk0hqpo

nzk0hqpo5#

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

drkbr07n6#

我无法解析此方法(无可否认,我没有搜索很长时间)

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

vwkv1x7d7#

如果您正在通过express和mongoose实现REST API,请参见下面的代码片段。(ADD示例)

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

希望能有所帮助

2nc8po8w

2nc8po8w8#

如果要使用架构

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

});

vwkv1x7d

vwkv1x7d9#

如果你想经常使用ObjectId而不想使用mongoose.types.ObjectId,你可以解构你的声明:

const {
  Types: { ObjectId: ObjectId },
} = require("mongoose");

const id=ObjectId("4edd40c86762e0fb12000003")

相关问题