【问题标题】:How to insert data in mongodb using mongoose in typescript?如何在 typescript 中使用 mongoose 在 mongodb 中插入数据?
【发布时间】:2021-10-04 23:06:34
【问题描述】:

我已经为 crud API 实现了一个打字稿代码,但目前,我在使用 mongoose 包使用 API 插入数据时遇到了一个问题。由于我的数据库是 MongoDB,所以我使用了这个包。

import Transaction from 'mongoose-transactions-typescript';

我正在做打字稿项目,所以我使用了这个包

public async createAffiliateUser(res_data: any){
        console.log("Function");
        

const transaction = new Transaction();

        console.log("Function123");
        const AffiliateUserModelName = 'affiliateusers'; // COLLECTION name
        console.log(res_data);
        await transaction.insert(AffiliateUserModelName, {
            name: res_data.name,
            userName: res_data.userName,
            groupId: res_data.groupId,
            commissionCount: res_data.commissionCount,
            commissionAmount: res_data.commissionAmount,
            is_active: res_data.is_active
        });
        
        return await transaction.run();
    }

在上面的代码中突出显示的行会抛出这样的错误

TypeError:mongoose_transactions_typescript_1.default is not a constructor

在上面的函数中,当我尝试使用猫鼬的默认创建方法时,即使传递如下完整数据,它也只插入单列数据

{
    "name": "Test",
    "userName":"test123",
    "groupId": "1",
    "commissionCount": 1,
    "commissionAmount": 2,
    "is_active": true
}

如果有人知道如何使用打字稿或上述问题的解决方案在 MongoDB 中插入数据,那么请帮我解决这个问题?

谢谢

【问题讨论】:

  • 如果你改用import Transaction from 'mongoose-transactions';会发生什么?
  • @EzraChang 也抛出了同样的错误

标签: node.js typescript mongodb mongoose mongoose-schema


【解决方案1】:

我不知道你为什么是这个代码结构为了使用猫鼬。

为了在 mongoose 中正确使用 mongodb 文档,我遵循的步骤如下:

  1. 像这样创建一个猫鼬模型架构:
// I usually like create this file in a database folder
import mongoose, { Document, Model } from "mongoose";
const Schema = mongoose.Schema;

// creating the actual mongoose schema

const UserSchema = new Schema(
  {
    firstName: {
      type: String,
    },
    lastName: {
      type: String,
    },
    username: {
      type: String,
    },
    lang: {
      type: String,
      default: "it",
    },
  },
  { timestamps: true }
);

// exporting the type in order to have all the correct linting

export interface IUser extends Document {
  id: string;
  firstName: string;
  lastName?: string;
  username?: string;
  createdAt: Date | number;
  updatedAt: Date | number;
}

// registering in mongoose models the schema with the relative interface

const User =
  (mongoose.models.User as Model<IUser>) ||
  mongoose.model<IUser>("User", UserSchema);
export default User;

此时让我们假设你有一棵类似这样的树:

root_folder
          |-- database
          |        |-- User.ts
          |
          |-- controllers
                      |-- addUser.ts

  1. 在集合中创建文档:
import { User } from "../../database/User.ts"

async function addUser(){
  const newUser = await new User({firstName: "foo", lastName: "bar", username:"testUser"}).save()
}

现在您应该在用户集合中拥有新文档

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 2012-11-03
    • 1970-01-01
    • 2021-11-25
    • 2016-09-19
    • 1970-01-01
    • 2017-03-12
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多