Nodejs mongoose 实现查询功能 修改成函数
Nodejs mongoose 实现查询功能 修改成函数
var mongoose = require(‘mongoose’) ;
var models = require(’…/models/username’) ;
var User = models.User ;
mongoose.connect(‘mongodb://localhost/mongogroup’) ;
function doquery(){
User.find({“username”:“xiaoming”},function(err,doc){
if(doc) {
console.log(‘found it’);
};
});
}
username.js
中的内容为
var mongoose = require('mongoose') ;
var Schema = mongoose.Schema ;
var UserSchema = new Schema({
username : String ,
}) ;
exports.User = mongoose.model('User',UserSchema) ;
数据库连接没有什么问题,为什么不能实现查询功能了?
ps:事实上去掉function doquery(){ }是可以工作的,为什么加上后运行就是没有任何反应!
要将 doquery
函数修改并确保其能够正确执行查询功能,我们需要确保几个关键点:
- 确保在调用
doquery
函数之前,Mongoose 已经成功连接到 MongoDB。 - 使用
async/await
来处理异步操作,这样可以更好地控制代码流程。 - 检查查询结果是否为空,并且正确处理错误。
下面是改进后的代码示例:
改进后的 doquery
函数
const mongoose = require('mongoose');
const models = require('../models/username');
const User = models.User;
// 连接数据库
mongoose.connect('mongodb://localhost/mongogroup', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log("Connected to MongoDB");
});
// 定义 doquery 函数
async function doquery() {
try {
const doc = await User.find({ "username": "xiaoming" });
if (doc.length > 0) {
console.log('Found it:', doc);
} else {
console.log('No user found with the username xiaoming');
}
} catch (err) {
console.error('Error occurred during query:', err);
}
}
// 调用 doquery 函数
doquery();
解释
-
数据库连接:
- 使用
mongoose.connect
方法连接到 MongoDB。这里使用了最新的选项useNewUrlParser
和useUnifiedTopology
来避免警告信息。 - 在连接成功后,输出一条确认信息。
- 使用
-
定义
doquery
函数:- 使用
async
关键字来定义doquery
函数,以便我们可以使用await
处理异步操作。 - 使用
try...catch
块来捕获可能发生的错误。 - 使用
await
等待User.find
查询完成,并检查返回的文档数组长度是否大于 0。 - 如果找到文档,打印出找到的文档;如果没有找到,则输出相应的提示信息。
- 使用
-
调用
doquery
函数:- 在脚本末尾直接调用
doquery()
函数,以执行查询操作。
- 在脚本末尾直接调用
通过这种方式,你可以确保查询功能能够正确执行,并且错误会被妥善处理。
搭车做个广告,操作mongoose必须少不了mongoomise
function doquery(){ User.find({“username”:“xiaoming”},function(err,doc){ if(doc) { console.log(‘found it’); }) ; } 少了个大括号吧
function doquery(){ User.find({“username”:“xiaoming”},function(err,doc){ if(doc) { console.log(‘found it’); } }) ; }
求解决!自己顶!
在你的代码中,doquery
函数被定义但没有被调用。因此,该函数不会被执行。你需要调用 doquery
函数以执行查询操作。
此外,为了提高代码的可读性和可维护性,可以将查询逻辑封装到一个独立的函数中,并提供一些参数来控制查询条件。下面是一个修改后的版本:
username.js
文件
保持不变:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
username: String,
});
module.exports = mongoose.model('User', UserSchema);
main.js
或其他入口文件
添加对 doquery
函数的调用,并改进查询逻辑:
var mongoose = require('mongoose');
var User = require('./models/username');
mongoose.connect('mongodb://localhost/mongogroup', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log("Connected to MongoDB");
}).catch((error) => {
console.error("Failed to connect to MongoDB", error);
});
// 定义一个查询函数
function doQuery(query, callback) {
User.find(query, function (err, doc) {
if (err) {
console.error('Error querying database:', err);
return;
}
if (doc.length > 0) {
console.log('Found it:', doc);
callback(null, doc); // 如果需要返回结果给调用者
} else {
console.log('No results found.');
callback(null, null); // 如果需要返回结果给调用者
}
});
}
// 调用 doQuery 函数进行查询
doQuery({ username: 'xiaoming' }, function (err, result) {
if (err) {
console.error('An error occurred:', err);
} else {
console.log('Result:', result);
}
});
解释
- mongoose.connect 现在使用了两个选项
useNewUrlParser
和useUnifiedTopology
来确保正确的连接配置。 - doQuery 函数 接受一个查询对象作为参数,并返回查询结果。
- 回调函数 在查询完成后被调用,以处理查询结果或错误。
- doQuery 函数 被调用时传入查询条件
{ username: 'xiaoming' }
和一个回调函数来处理查询结果。
这样你可以更灵活地复用查询逻辑,并且更容易扩展其他查询条件。