如何在 Node.js 中使用 mongoose 将大数组保存到 MongoDB

Posted

技术标签:

【中文标题】如何在 Node.js 中使用 mongoose 将大数组保存到 MongoDB【英文标题】:How to save a large array to MongoDB using mongoose in Node.js 【发布时间】:2022-01-22 05:41:02 【问题描述】:

我想在 MongoDB 中保存一个非常大的数组(超过 40k 个字符串)。

const allWords = require("an-array-of-english-words");
const  patterns  = require("./models/pattern");
const mongoose = require("mongoose");

// Create a model for the Words object
const Words = mongoose.model(
  "Words",
  new mongoose.Schema(
    words: 
      type: Array,
      required: true,
    ,
  )
);

/*
  Filters the list of words to use only words greater than 4 and less than 6
*/
const array = allWords.filter(function (text) 
  return text.length >= 4 && text.length <= 6;
);

let words = [...array];
for (let i = 0; i < array.length; i++) 
  for (let j = 0; j < patterns.length; j++) 
    let result = patterns[j].test(array[i]);
    if (result) 
      let index = array.indexOf(array[i]);
      array.splice(index, 1);
    
  


async function saveWords(words) 
  console.log("start");
  const array = new Words( words );
  console.log("mid");
  console.log(array);

  //it's successfully making the array object but it's having trouble saving it

  await array.save();
  console.log("done");


saveWords(words);

console.log("array length: " + array.length + " " + allWords.length);

在调用保存数组之前一切正常,然后在控制台上记录超时错误。这是我使用 Node.js 进行的第一个项目,我确信我犯了一个容易修复的小错误,但我不确定它是什么。

【问题讨论】:

为什么要将这么多数据保存在一个数组中?您应该更好地设计它,因为会有性能问题。 我愿意接受您提供的任何反馈,以改进我的程序的设计和流程。你有什么建议? 你想达到什么目的?是什么让你保存这么大的数据?如果需要,您将如何使用或更新它? 所以,我正在制作一个密码生成器,但我想使用整个单词而不是随机字符串(没有特别的原因,只是认为这样做会很有趣)。有这么多数据的原因是因为我使用了一个名为“an-array-of-english-words”的 npm 包,其中包含超过 275k 的单词,而我在过滤列表后得到了 40k。我仍然是编码术语的新手,但我假设“消费”意味着我将如何使用数据。我基本上会在数组中随机选择一个单词并将其连接到一个字符串中,并在每个单词之间添加一个特殊字符和数字。 那么,你想设计一个密码生成器?? 【参考方案1】:

我想说您不需要将这些单词保存在数据库中,而是先创建一个创建随机字符串的算法,然后如果您想添加数字或特殊字符,您可以为创建的字符串添加随机性。

您可以使用第三方 npm 包。您可以查看this。

另外,如果你看看其他人是如何实现它的,那就太好了。这将是改进如何有效实施它的好习惯。 This 可以是一个不错的包。

【讨论】:

以上是关于如何在 Node.js 中使用 mongoose 将大数组保存到 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

您如何在 Node.js + Express + Mongoose + Jade 中处理表单验证,尤其是嵌套模型

如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)

Node.js:如何在 mongoose.js 中执行 count 命令?

如何让 node.js 使用 mongoose 连接到 mongolab

使用 mongoose(Node.js) 在 MongoDB 中搜索

如何将 Mongoose/Mongodb 与 node.js- 护照身份验证一起使用