Node.js Mongoose.js 字符串到 ObjectId 函数
Posted
技术标签:
【中文标题】Node.js Mongoose.js 字符串到 ObjectId 函数【英文标题】:Node.js Mongoose.js string to ObjectId function 【发布时间】:2020-09-21 06:17:05 【问题描述】:是否有使用猫鼬将字符串转换为节点中的 objectId 的功能?架构指定某物是一个 ObjectId,但是当它从字符串中保存时,mongo 告诉我它仍然只是一个字符串。例如,对象的_id 显示为objectId("blah")
。
【问题讨论】:
【参考方案1】:你可以这样做:
var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
【讨论】:
是的,在这种情况下更简洁一些。如果执行 fromTime(),可能只需要使用 mongo.BSONPure 如果它是无效的字符串,这会引发错误吗?寻找在 REST API 中对 mongo id 字段进行输入验证的最佳方法。 并没有真正回答这个问题,因为使用这种方法,字符串将被转换并且与原始字符串不同。 @KevinDente 我正在使用带有 Typescript 的 Nodejs,我已经尝试了您的解决方案,但仍然得到一个字符串,并且我的查询没有返回它应该返回的内容。关于如何在打字稿上做的任何想法? 似乎可以使用常见的 js 需求,但使用 es6import mongoose from 'mongoose';
似乎不起作用。 Argument of type 'import("mongoose").Types.ObjectId' is not assignable to parameter of type 'import("mongoose").Schema.Types.ObjectId'.
。还有其他人得到这个吗?【参考方案2】:
你也可以用这个
const ObjectId = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");
这是最简单的方法
【讨论】:
【参考方案3】:你可以这样做:
var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");
编辑:新标准有 fromHexString 而不是 fromString
【讨论】:
好吧,更多“新”标准似乎是 mongoose.mongo.BSONPure.ObjectID.createFromHexString()(从 mongoose 3.9.7 开始) 对于那些试图这样做的人来说,这是一个比所选答案更好的答案,因为如果您已经在使用 mongo id,它不会转换 id。 这不再有效,改用接受的答案 BSONPure 对我来说不是mongoose.mongo
的一部分。有人可以确认吗?【参考方案4】:
从 cmets 来看,您正在寻找:
mongoose.mongo.BSONPure.ObjectID.isValid
或者
mongoose.Types.ObjectId.isValid
【讨论】:
【参考方案5】:var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");
【讨论】:
您能评论一下mongoose.Types.ObjectId
和mongoose.mongo.ObjectId
之间的区别吗? mongoose 的对象属性不同,但它们可能在下面引用相同的方法。请评论Types
vs mongo
的底层方法。【参考方案6】:
我无法解决这个方法(诚然我没有搜索太久)
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);
【讨论】:
【参考方案7】:如果您通过 express 和 mongoose 实现 REST API,只需查看以下代码 sn-p。 (添加示例)
....
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
)
...
希望对你有帮助
【讨论】:
【参考方案8】:如果你想使用架构
const yourSchemma = new Schema(
"customerId":
type: mongoose.Types.ObjectId,
required: true
);
【讨论】:
以上是关于Node.js Mongoose.js 字符串到 ObjectId 函数的主要内容,如果未能解决你的问题,请参考以下文章
Node.js Mongoose.js 字符串到 ObjectId 函数
Node.js Mongoose.js 字符串到 ObjectId 函数
Node.js:如何在 mongoose.js 中执行 count 命令?