Mongoose 请求 id 字段 returns id 和 _id
Mongoose request for id field returns id and _id
在我的 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);
});
但是,我发现 returns id
和 title
符合预期,但它也是 return 默认的 _id
字段。为什么会这样,我该如何阻止它?
在 find()
函数中,您可以传递两个参数(条件和投影)。投影是您想要(或不需要)的字段。在您的情况下,您可以将代码更改为
Job.find({}, {_id:0, id: 1, title: 1}, function(err, jobs) {
if (err) throw err;
res.send(jobs);
});
它应该这样做。
有一个选项可以在架构级别阻止 id。
对我来说这很好用。
new Schema({ name: String }, { id: false });
在我的 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);
});
但是,我发现 returns id
和 title
符合预期,但它也是 return 默认的 _id
字段。为什么会这样,我该如何阻止它?
在 find()
函数中,您可以传递两个参数(条件和投影)。投影是您想要(或不需要)的字段。在您的情况下,您可以将代码更改为
Job.find({}, {_id:0, id: 1, title: 1}, function(err, jobs) {
if (err) throw err;
res.send(jobs);
});
它应该这样做。
有一个选项可以在架构级别阻止 id。 对我来说这很好用。
new Schema({ name: String }, { id: false });