【问题标题】:Mongoose auto increment for existing collection现有集合的猫鼬自动增量
【发布时间】:2021-07-17 16:36:30
【问题描述】:

我有一个名为users 的现有集合,其架构如下。我想在其中添加一个名为 userNumber 的新自动递增字段。我已经看到了基于counter 的解决方案,但未能实现这些解决方案,主要是因为我没有看到它将为现有文档进行编号以及放置该代码的位置的工作。所以我的问题是如何添加具有自动递增值的userNumber 字段以及如何在现有记录中填充此列的值

user.model

const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
    userType: {
      type: String,
      required: false,
    },
    uid: {
      type: String,
      required: false,
    },
    firstName: {
      type: String,
      required: true,
    },
    lastName: {
      type: String,
    },
    email: {
      type: String,
      lowercase: true,
    },
});

module.exports = mongoose.model('User', userSchema);

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongodb-query


    【解决方案1】:

    首先您可以将 userNumber 添加到您的用户架构中,当您想要创建新用户时,然后通过从数据库中获取旧值并递增来自动将值添加到 userNumber。

    【讨论】:

    • 是的,我明白了,但是现有文件呢
    • 你有旧文件已经在生产中了吗?
    • 好的,您可以通过运行通过所有文档获取的函数来更新所有文档并通过添加 userNumber 进行更新
    【解决方案2】:

    这是它与计数器的工作方式:

    export const CounterSchema = new mongoose.Schema({
      _id: {type: String, required: true},
      seq: {type: Number, default: 0}
    },
    

    _id 可以是您想要的任何东西。在这种情况下,我会将其命名为 user

    seq(序列)是您当前的计数,从 0 开始。

    要更新计数器,您必须在每次创建新用户时调用它。

    const callBack: MongooseDocument = await counterModel.findOneAndUpdate({_id: 
    'user'}, {$inc: {seq: 1}}, {new: true});
    

    访问您调用的新计数: newCount = callBack.toJSON().seq

    要使其适用于您当前的情况,您必须遍历您的用户并一一更新。完成后,您更新您的计数器,然后在创建用户时执行此操作..

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 2016-10-16
      • 2023-03-19
      • 2018-12-12
      • 2020-06-25
      • 2014-06-10
      相关资源
      最近更新 更多