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

时间:2011-07-05 05:15:20

标签: mongodb node.js mongoose

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

8 个答案:

答案 0 :(得分:334)

你可以这样做:

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

答案 1 :(得分:9)

你可以这样做:

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

编辑:新标准来自fromSexString而不是fromString

答案 2 :(得分:6)

您也可以使用此

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

这是最简单的方法

答案 3 :(得分:5)

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

mongoose.mongo.BSONPure.ObjectID.isValid

或者

mongoose.Types.ObjectId.isValid

答案 4 :(得分:5)

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:1)

如果要通过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
})
}
...

希望有帮助

答案 7 :(得分:-1)

如果你想使用架构

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

});