繁体   English   中英

从 Mongoose / MongoDB.find 方法正确检索和显示数据

[英]Properly retrieve and display data from Mongoose / MongoDB .find method

我正在 Node.js 中开发一个命令行应用程序,该应用程序涉及使用 Mongoose 从数据库 (DB) 中检索结果。 我创建的一个重要的 function 无论我如何努力以及我通过 go 完成了多少教程,都无法正常工作。

function 的主要目的是查看数据库(一个简单的词库)是否有包含给定短语/单词的条目。

以下是特定 function 的完整代码设置:

const mongoose = require('mongoose'),
    mongoSettings = {
        useNewUrlParser: true,
        useUnifiedTopology: true
    },
    wordSchema = new mongoose.Schema(
        { item: String }
    );

/**
 * Looks for a given word or phrase in database.
 * Will eventually return a boolean.
 * 
 * @param {string} word2LookUp Word or phrase to search for
 * @param {string} lang Which language list to search in [english (default), spanish, or french]
 */

const inWordBank = (word2LookUp,lang="english") => {
    mongoose.connect('mongodb://localhost:27017/word-bank', mongoSettings);
    mongoose.connection
      .once("open",()=>{
        console.log(`// ----- Searching for: "${word2LookUp}"...`);

        const Word = mongoose.model('Word', wordSchema,lang);
        Word.find({item: word2LookUp}, function (err, words) {

            console.log(words); // <---------[ WHERE I'M HAVING TROUBLE ]

        });

        mongoose.connection.close();
      })
      .on("error", error => {
        console.log(">>> Error: ",error)
        mongoose.connection.close();
      });
}

module.exports = {
    inWordBank: inWordBank
}

这就是我试图在我的app.js文件上执行 function 的方式:

const wordBank = require("./wordBank");

wordBank.alreadyRegistered("fem");

我在控制台中得到的只是:

// ----- Searching for: "fem"...
undefined
undefined
undefined

一些额外的花絮:

  • 有问题的特定数据库中有 3 个文档在其“项目”部分包含“fem”。 这可能就是为什么由于某种奇怪的原因有undefined的 3 次。
  • 当我写入数据库时,数据库工作正常,所以我知道这不是连接问题
  • 没有产生其他错误。
  • 在我的package.json文件中,我的依赖项如下所示:
  "devDependencies": {
    "chai": "^4.2.0",
    "mocha": "^6.2.2"
  },
  "dependencies": {
    "mongoose": "^5.7.10"
  }

有没有我只是想念的重要拼图? 还是我必须从正方形 1 重写它?

现在您正在搜索word2Lookup的确切值。 要搜索item中包含字符串的文档,您必须使用正则表达式。

所以对于wordBank.alreadyRegistered("fem"); 尝试使用wordBank.alreadyRegistered(/fem/g); .

或者,在inWordBank()的顶部,您可以获取传递的字符串并从中创建一个正则表达式,如下所示: word2Lookup = new RegExp(word2Lookup, 'g'); . 只需将其放在inWordBank() function 的顶部即可。

编辑:还有一个问题。 由于该值返回undefined ,因此 MongoDB 实际上会引发错误。 console.log(err); find回调中,它会告诉你错误。

正如@chirspytoes所说,验证是否没有错误很重要,您可以按以下方式进行:

Word.find({item: word2LookUp}, function (err, words) {

             if(err) { 
                  console.error(err);
                  return; 
                }
            console.log(words);

});

要考虑的第二件事是使用find()方法获得的结果以数组的形式出现。

例子:

[
    {
        "item": "fem..."
    },
    {
        "item": "...fem"
    },
    {
        "item": "fem"
    },
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM