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

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

299457 次浏览

你可以这样做:

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

编辑:新标准使用frommhexstring而不是fromString

你可以这样做:

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

从评论来看,你要找的是:

mongoose.mongo.BSONPure.ObjectID.isValid

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

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

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

如果您正在通过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
})
}
...

希望有帮助

你也可以用这个

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

这是最简单的方法

如果你想使用模式

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

});

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

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


const id=ObjectId("4edd40c86762e0fb12000003")