是否有一个函数将字符串转换为节点使用猫鼬objectId ?模式指定某个对象是ObjectId,但当它从字符串中保存时,mongo告诉我它仍然只是一个字符串。例如,对象的_id显示为objectId("blah")。
你可以这样做:
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
Or
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为例)
.... 出口。AddSomething = (req,res,next) =>{ const newSomething = new SomeEntity({ _id:new mongoose.Types.ObjectId(), //它自己的ID somethingName: req.body.somethingName, 如果你想要传递一个对象ID,则传入一个foreignkey: mongoose.Types.ObjectId(req.body.theForeignKey)// }) } ...
希望有帮助
你也可以用这个
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")
推荐文章
- 在node.js中使用async / await文件系统
- NodeJS -用NPM安装错误
- 如何为本地安装npm包设置自定义位置?
- 回调函数来处理管道的完成
- Express函数中的“res”和“req”参数是什么?
- node.js TypeError:路径必须是绝对路径或指定根路径到res.sendFile[解析JSON失败]
- Passport.js -错误:序列化用户到会话失败
- Node.js vs .Net性能
- 从电子应用程序中删除菜单栏
- 如何用node.js实现一个安全的REST API
- 如何处理Node.js中的循环依赖
- 在猫鼬,我如何排序的日期?(node . js)
- 如何在Node.js内进行远程REST调用?旋度吗?
- 将映像存储在MongoDB数据库中
- 重复Mongo ObjectId的可能性在两个不同的集合中生成?