[英]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
一些额外的花絮:
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.