Mongoose - 如何替换 _id 作为主索引?
Posted
技术标签:
【中文标题】Mongoose - 如何替换 _id 作为主索引?【英文标题】:Mongoose - how to replace _id as primary index? 【发布时间】:2019-03-11 04:19:35 【问题描述】:鉴于以下示例架构,有没有办法让“电子邮件”成为 UserSchema 上的主索引,而不是默认的“_id”(假设电子邮件始终是唯一的)? 如果可能的话,当它是主索引时,搜索“电子邮件”的性能会更好吗?
另外,作为替代方案,是否可以对复合字段或复合字段进行主索引如果可以,“firstName.firstName”上的主键的语法是什么样的? 在这种情况下,StorySchema 将如何引用 UserSchema。语法看起来相同还是不同?
var mongoose = require("mongoose");
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const StorySchema = new Schema(
title:
type: String,
required: true
,
body:
type: String,
required: true
,
user:
type: Schema.Types.ObjectId,
ref: 'users'
,
date:
type: Date,
default: Date.now
);
mongoose.model('stories', StorySchema);
const UserSchema = new Schema(
_id: false,
email:
type: String,
required: true
,
firstName:
type: String
,
lastName:
type: String
,
);
mongoose.model('users', UserSchema);
【问题讨论】:
一种选择是将电子邮件 ID 存储在 _id 字段中。 我找不到任何名为primary index
的概念,你的意思是primary key
?在您正确选择它们之前,索引之间不会有性能 优势。
【参考方案1】:
毕竟,mongoose 文档可能会有所帮助。我不确定 1 代表什么。例如:_id: 1 ..., groupNumber: 1 ... lastname: 1 ....
https://docs.mongodb.com/master/core/index-unique/
看起来像是使用一个或多个字段定义主键的示例:
_id: 1, a: [ loc: "A", qty: 5 , qty: 10 ]
定义复合二级索引的示例。
db.members.createIndex( groupNumber: 1, lastname: 1, firstname: 1 , unique: true )
【讨论】:
以上是关于Mongoose - 如何替换 _id 作为主索引?的主要内容,如果未能解决你的问题,请参考以下文章
mongoose 在 express 中使用 _id 链接两个集合,并将 id 作为数字或字符串插入
Mongoose 6 $group with Typescript -> Property '_id' 与索引签名不兼容