【问题标题】:Mongoose - how to replace _id as primary index?Mongoose - 如何替换 _id 作为主索引?
【发布时间】: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?在您正确选择它们之前,索引之间不会有性能 ‍‍优势。

标签: mongodb mongoose mongoose-schema query-performance


【解决方案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 } )

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2015-03-21
    • 2019-03-12
    • 2021-12-19
    • 2015-12-04
    • 2022-01-21
    • 2017-10-09
    • 2017-07-03
    • 1970-01-01
    相关资源
    最近更新 更多