【问题标题】:Array to mongoose insertMany() method is not working correctly ! Anyone with an idea why?mongoose insertMany() 方法的数组无法正常工作!任何人都知道为什么?
【发布时间】:2021-06-27 19:00:16
【问题描述】:

我有一个 js 文件 createMoreUsers.js,它从包含 userSchema 的 user.js 文件中导入 mongoose 模型。我希望一个数组来保存 firstName 和 lastName 的对象,但是当我开始使用 mongoose insertMany() 方法时,它只保存第一个对象,而不保存任何其他对象。

它改为输出以下错误。 发生错误:E11000 重复键错误集合:fcc-mail.users 索引:user_1 重复键:{用户:空}

user.js 文件

const mongoose = require('mongoose')

let userSchema = new mongoose.Schema({

    firstName: String,
    lastName: String

});

const User = mongoose.model('User', userSchema);

module.exports = User;

创建MoreUsers.js 文件


//requiring mongoose only to close the connection

const mongoose = require('mongoose');

//requiring the database file for connecting to the mongo db

const dbconnect = require('../database');

//create a new instance of the database connection 

new dbConnect.Database();

//lets require the mongoose model 

const UserModel = require('../models/user');

//creating an array of objects

let userArray = [

     {firstName: 'Charles', lastName: 'Parker'},
     {firstName: 'Thomas', lastName: 'Anderson'},
     {firstName: 'William', lastName: 'Wallace'},
     {firstName: 'Tin', lastName: 'Tin'}

]

UserModel.insertMany(userArray)
.then(function(docs){


    console.log('All user documents are saved to the database', docs);
    mongoose.connection.close();

})
.catch(function(err){

    console.error('Error Occurred: ', err.message);

});

任何建议。总是非常感谢。

跟进 - 包括我的 database.js 文件


const mongoose = require('mongoose');

const server = 'localhost:27017';
const databaseName = 'fcc-mail';


class Database {
    

    constructor() {
        this._connect()
    }

    _connect() {
         mongoose.connect(`mongodb://${server}/${databaseName}`, {useNewUrlParser: true, useCreateIndex: true, useFindAndModify: false, useUnifiedTopology: true})
        .then(() => {
            console.log('Database connection success');
        })
        .catch((err) => {
            console.error('Database connection error', err);
        })
    }

}

module.exports.Database = Database;

如果我需要在 database.js 文件中使用 async/await,我该如何在类中使用?

【问题讨论】:

  • 可能是因为你忘记了let userSchema = new mongoose.Schema中的“新”二字
  • 抱歉打错了。 new 关键字在原始代码中。谢谢
  • 哦,现在我看到代码没有等到数据库连接(.then()await

标签: javascript node.js mongodb mongoose


【解决方案1】:

我刚刚尝试了以下代码,它在我的最终工作。您可以检查此代码 sn-p 并获得一些想法。


// connect database
(async () => {
  try {
    await mongoose.connect(
      "your mongo database link here",
      { useUnifiedTopology: true, useNewUrlParser: true }
    );
    console.log("database connected...");

    // seed data
    const userArray = [
      { firstName: "Charles", lastName: "Parker" },
      { firstName: "Thomas", lastName: "Anderson" },
      { firstName: "William", lastName: "Wallace" },
      { firstName: "Tin", lastName: "Tin" }
    ];

    await User.deleteMany(); // removing all previous data (if any) (Never use this in production)
    const data = await User.insertMany(userArray);

    console.log(data);
  } catch (error) {
    console.log(error);
  }
})();

【讨论】:

  • 我已经尝试过使用异步函数并在连接和 insertMany() 上等待,但我仍然只将第一个文档保存到数据库中。我现在在终端上没有收到任何错误,但它曾经说 E11000 重复键错误。我的数据库连接位于名为 database.js 的不同文件中,我使用 new 关键字创建了该连接的新实例。由于它保存了一个文档,这意味着它确实连接到数据库,但它不会批量保存其余部分。感谢您的回复。
【解决方案2】:

为遇到类似错误的其他人编写此答案E11000 重复键错误

根据这个 stackoverflow 帖子:enter link description here

问题是已经有一个使用空值创建的索引,可能是因为已经使用相同的架构创建了一个集合。

解决方法是删除索引。我从 mongodb 罗盘索引选项卡中删除了导致问题的索引,然后单击垃圾箱以删除有问题的索引。

这样做后,我再次运行该文件,并将所有用户都保存到数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多