如何在 Mongoose 中定义除 _id 以外的其他主键?

dou*_*ira 4 javascript mongoose mongodb node.js mongoose-schema

我想用不是_id. 该文档说它只允许_id在子文档中将架构选项标志设置为 false。另外,我希望主键是 aString而不是ObjectId. 这可能吗?

使用二级索引是一种选择,但不是一个很好的选择,因为我希望主键具有正确的名称。当我不需要时,我也不想摆弄两个不同的索引。

这设置documentId为二级索引,但这使得主键无用,因为我只想选择 bydocumentId而不是_id最终自动设置的任何内容。

const DocumentSchema = new Schema({
  documentId: { type: String, index: true }
})
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情

const DocumentSchema = new Schema({
  documentId: String
})
Run Code Online (Sandbox Code Playgroud)

然后告诉它用documentId作主键。

说明:我特别不想将_id用作键,因为它的名称无用,而我想用documentId作主键。

Ale*_*Dim 7

您可以_id在架构阶段手动定义字段,例如:

const DocumentSchema = new Schema({
  _id: String //or number, or (increment) function,
  ...
  other_field: BSON_type,
})
Run Code Online (Sandbox Code Playgroud)

更新了 Nestjs

要手动覆盖或定义_id架构中的字段,请使用以下示例:

/**
 * extends Document is a Mongoose Document from 'mongoose'
 * and don't forget about Nest Schema decorator
 */
@Schema()
export class Key extends Document { 
  @Prop()
  _id: string;

  @Prop({ required: true })
  secret: string;
}
Run Code Online (Sandbox Code Playgroud)

禁用通过_id子文档@Prop@Prop({ _id: false })

如果您正在寻找一系列带有_id示例的嵌入式文档,您可能想看看我关于它的另一个问题。

_idinsert阶段之前为您的文档添加价值,或通过您的功能或在零件中这样的npm模块生成它。您唯一应该确保的是,您的自定义生成的值必须是唯一的。如果他们不这样做,mongo 在插入没有唯一值的文档时会返回一个错误。schema_id_id