是否有一个函数可以使用猫鼬将节点中的字符串转换为objectId?架构指定某个东西是ObjectId,但当它从字符串中保存时,mongo告诉我它仍然只是一个字符串。例如,对象的_id显示为objectId("blah")
。
你可以这样做:
var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
您也可以使用
const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");
这是最简单的方法
你可以这样做:
var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");
EDIT:新标准有fromString而不是fromString
从评论中判断,您正在寻找:
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实现RESTneneneba 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 yourSchemma = new Schema({
"customerId": {
type: mongoose.Types.ObjectId,
required: true
}
});
对于新版本,在所选答案中添加"new"关键字是有效的,就像这个
var mongoose = require("mongoose");
var _id = new mongoose.Types.ObjectId("64b0ee2c189286a5abc6b4ba");
如果你想大量使用ObjectId,但又不想使用mongoose.types.ObjectId,你可以破坏你的声明:
const {
Types: { ObjectId: ObjectId },
} = require("mongoose");
const id=ObjectId("4edd40c86762e0fb12000003")
你可以这样做:
import mongoose from "mongoose";
const { ObjectId } = mongoose.Types;
const id = ObjectId('4edd40c86762e0fb12000003');