Mongoose 请求 id 字段返回 id 和 _id
Posted
技术标签:
【中文标题】Mongoose 请求 id 字段返回 id 和 _id【英文标题】:Mongoose request for id field returns id and _id 【发布时间】:2015-03-06 13:41:25 【问题描述】:在我的 Mongoose 架构中,我有一个 id
字段,每个文档都有一个唯一的 ID。这与默认 _id
字段使用的系统相同,如下所示:
var JobSchema = new mongoose.Schema(
id: type:String, required:true, unique:true, index:true, default:mongoose.Types.ObjectId ,
title: type: String ,
brief: type: String
);
module.exports = mongoose.model("Job", JobSchema);
现在,如果我查询架构以获取 id 和标题,我会这样做:
Job.find().select("id title").exec(function(err, jobs)
if (err) throw err;
res.send(jobs);
);
但是,我发现这会按预期返回 id
和 title
,但它也返回默认的 _id
字段。为什么会这样?我该如何阻止它?
【问题讨论】:
【参考方案1】:在find()
函数中,您可以传递两个参数(条件和投影)。投影是您想要(或不想要)的字段。在您的情况下,您可以将代码更改为
Job.find(, _id:0, id: 1, title: 1, function(err, jobs)
if (err) throw err;
res.send(jobs);
);
它应该这样做。
【讨论】:
太棒了,我从来不知道你能做到这一点!非常感谢 @Coop 您也可以将-_id
添加到现有的select
调用中,使其成为Job.find().select("-_id id title")
当我尝试这样做_id:0, id: 1
时,投影正确地只包含“id”字段,但它设置为空?当我将其更改为_id:1, id: 1
时,“id”属性会显示正确的值,但我当然不希望投影中的 _id 字段?奇怪的行为。【参考方案2】:
有一个选项可以阻止模式级别的 id。 对我来说,这非常好。
new Schema( name: String , id: false );
Mongoose Docs
【讨论】:
这对我来说效果更好,尤其是在使用虚拟和填充时以上是关于Mongoose 请求 id 字段返回 id 和 _id的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose 在结果的 _id 字段中返回“new ObjectId”
mongoose findById 返回 null 并且 id 作为对象 id 存储在数据库中
使用 Mongoose 在投影中包含 Mongodb“_id”字段