首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

expressjs中的MongoDB find()查询在第二次运行时返回空结果

问题描述: 在使用Express.js和MongoDB时,执行MongoDB的find()查询在第二次运行时返回空结果。

回答: 这个问题可能是由于未正确处理异步操作所导致的。在Express.js中使用MongoDB时,需要注意处理异步操作的方式。

首先,确保你的代码正确连接到了MongoDB数据库,并且在查询前已经完成了连接。

然后,在查询代码中,使用Promise、async/await或者回调函数来处理异步操作。下面是一种使用async/await的示例:

代码语言:txt
复制
const express = require('express');
const app = express();
const MongoClient = require('mongodb').MongoClient;

// 连接MongoDB数据库
const url = 'mongodb://localhost:27017/mydb';
const connectDB = async () => {
  const client = await MongoClient.connect(url, { useNewUrlParser: true });
  return client.db();
};

// 创建Express路由
app.get('/', async (req, res) => {
  try {
    const db = await connectDB();
    const collection = db.collection('mycollection');
  
    // 执行查询操作
    const result = await collection.find({}).toArray();
  
    res.send(result);
  } catch (error) {
    console.error(error);
    res.status(500).send('Internal Server Error');
  }
});

// 启动Express服务器
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

这样,在每次运行查询时,都会正确返回结果。

另外,你还可以检查以下几点来排查问题:

  1. 确保MongoDB数据库中存在数据,并且你的查询条件是正确的。
  2. 检查你的Express应用的其他部分是否有可能影响到查询结果,比如中间件、路由设置等。
  3. 在查询之前,可以先尝试使用console.log()等方式来输出一些调试信息,以便更好地定位问题所在。

总结: 在使用Express.js和MongoDB进行查询操作时,需要注意处理异步操作。正确连接数据库,使用Promise、async/await或者回调函数来处理异步操作,确保查询操作在正确的时机执行,并且排查其他可能影响查询结果的因素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MEAN-全堆栈javascript开发框架

引言 使用JavaScript能够完整迅速做出Web应用程序,目前一套工具包括MongoDBExpressJS,AngularJS和Node.js越来越受到欢迎,其开发灵活性和易用性加快开发效率,简化开发者工作...今天你有很多架构可以选择建立一个Web应用,你需要是快速开发,提高效率和注重健壮性,你需要是更加精细更加敏捷技术。 什么是MEAN? ?...mongoDB我们可以直接存储JSON格式数据,然后ExpressJSNodeJS服务器编写一个基于JSON查询,并无缝地(无需像其他语言需要在JSON和语言数据模型之间转换)传递JSON...同时,数据库调试和管理也变得轻松了许多,存储在数据库对象基本上等同于你客户端看到对象。...更妙是,前端工作人员也能够轻松了解后端代码和数据库查询,使用是相同语法和对象,你不必考虑多套语言最佳实践,降低了入门门槛。 MEAN架构原理如下图: ?

1.1K50

MEAN-全堆栈javascript开发框架

引言 使用JavaScript能够完整迅速做出Web应用程序,目前一套工具包括MongoDBExpressJS,AngularJS和Node.js越来越受到欢迎,其开发灵活性和易用性加快开发效率,简化开发者工作...今天你有很多架构可以选择建立一个Web应用,你需要是快速开发,提高效率和注重健壮性,你需要是更加精细更加敏捷技术。 什么是MEAN? ?...mongoDB我们可以直接存储JSON格式数据,然后ExpressJSNodeJS服务器编写一个基于JSON查询,并无缝地(无需像其他语言需要在JSON和语言数据模型之间转换)传递JSON...同时,数据库调试和管理也变得轻松了许多,存储在数据库对象基本上等同于你客户端看到对象。...更妙是,前端工作人员也能够轻松了解后端代码和数据库查询,使用是相同语法和对象,你不必考虑多套语言最佳实践,降低了入门门槛。 MEAN架构原理如下图: ?

1.3K60

一日一技:实现有过期时间LRU缓存

摄影:产品经理 下厨:kingname 一日一技:实现函数调用结果 LRU 缓存一文,我们提到Python自带LRU缓存lru_cache。通过这个装饰器可以非常轻松地实现缓存。...后面即使我向MongoDB添加了新对应关系,只要程序不重启,就无法读取到新对应关系。...我们知道,使用lru_cache时,如果调用同一个函数,并且传入参数相同,那么从第二次开始就会使用缓存。现在我们如何让时间每10分钟内相同呢?...600秒,那么time.time() // 600值是相同第二次直接使用缓存,也就不会查询MongoDB了。...当时间超过10分钟后,时间戳除以600值增加了,于是缓存没有命中,进入查询MongoDB过程,更新id_name_map。实现了有过期时间LRU缓存。

2.9K10

MongoDB 学习笔记

)相当于 SQL column 索引 (index)相当于 SQL index 主键 (primaryKey)相当于 SQL 主键,但 MongoDB 会自动插入(insert)数据时将...除此之外,我们还需要知道 MongoDB 中有个 查询构造器 概念,查询构造器 类似于 SQL WHERE 语句 查询构造器 在学习查询构造器之前,我们先清洗下 mongo_playground...查询年龄不等于 18 岁用户 > db.users.find({age: {$ne: 18}}) 3.2.1.5 判断文档是否存在某个域 3.2.1.4 第 4 个示例 4....本节我们将学习包括查询指定域、排序、返回结果集记录数限制和分页等功能,这些方法应用程序开发过程中会十分常见。...find 方法返回结果即为依据查询选择器匹配到文档集合 游标,这样可以通过链式操作对 find 结果集进行处理。

1.6K10

MongoDB索引选择重要性

查询时会按 _id 排序,2个主要查询条件如下,先执行find命令,然后遍历cursor,读取所有满足条件文档。...,总文档数超过1亿条 MongoDBfind、getMore特性 find命令,会返回第一批满足条件batch(默认101条记录)以及一个cursor getMore 根据find返回cursor...如果 created_at 字段分布非常离散(如本案例数据),则全表扫描找出符合条件文档开销更大 MongoDB 索引是基于采样代价模型,一个索引对采样数据集更优,并不意味着其对整个数据集也最优...执行过程,也会根据执行计划表现,比如一个执行计划,很多次迭代都没遇到符合条件文档,就会考虑这个执行计划是否最优了,会触发重新构建执行计划逻辑(具体触发策略还没有详细研究,后续再分享),比如方案...最懂数据还是业务自身,对于查询优化器搞不定case,可以通过查询时加 hint,自己指定索引来构建执行计划。 END 作者:林青 Mongoing中文社区技术专家。

61930

MongoDB索引选择重要性

查询时会按 _id 排序,2个主要查询条件如下,先执行find命令,然后遍历cursor,读取所有满足条件文档。...,总文档数超过1亿条 MongoDBfind、getMore特性 find命令,会返回第一批满足条件batch(默认101条记录)以及一个cursor getMore 根据find返回cursor...如果 created_at 字段分布非常离散(如本案例数据),则全表扫描找出符合条件文档开销更大 MongoDB 索引是基于采样代价模型,一个索引对采样数据集更优,并不意味着其对整个数据集也最优...执行过程,也会根据执行计划表现,比如一个执行计划,很多次迭代都没遇到符合条件文档,就会考虑这个执行计划是否最优了,会触发重新构建执行计划逻辑(具体触发策略还没有详细研究,后续再分享),比如方案...最懂数据还是业务自身,对于查询优化器搞不定case,可以通过查询时加 hint,自己指定索引来构建执行计划。 END 作者:林青 Mongoing中文社区技术专家。

2K20

你真的了解mongoose吗?

定义一个具有给定名称虚拟属性,该名称可以获取/设置这个路径 索引 你可以用 schema 类型选项声明 MongoDB 索引。 index: 布尔值,是否属性定义一个索引。...查询 对于 Mongoosecha 查找文档很容易,它支持丰富查询 MongoDB 语法。包括find、findById、findOne等。..., [projection], [options], [callback]) 下面让我们依次看下 find()各个参数实际场景应用: conditionsModel.find({})Model.find...如果出错,则 error 是出错信息,result 是 null;如果查询成功,则 error 是 null, result 是查询结果查询结果结构形式是根据查询方法不同而有不同形式。...find() 方法查询结果是数组,即使没查询到内容,也会返回 [] 空数组。

41.5K30

MongoDB find getmore操作慢问题排查

MongoDB,其查询返回结果批大小默认为101。...({ timetag: { 从数据以及相应结果数量分布可以看出,查询结果主要分布T0~T1和T2后时间段内。...我们发现,查询结果在timetag上分段分布,分布timetag两头,中间存在一大段无效数据。第1~199结果分布T0~T1时间段内,第200后结果分布T2时间段后。...如果使用原查询计划,即只使用timetag索引来扫描全表,查询第199个后结果时将会非常慢,因为这些结果分布1.9亿数据里。...这也解释了第一次查询获取101个结果快,因为只需查扫描T0~T1时间段内400多个数据,第二次查询需要获取第102~202个数据则慢,因为需要先扫描1千多万无效数据然后才能返回结果

2.2K40

MongoDB DBA常用NoSQL语句(全)

go2":true})--select hid,go2 from table1 where hid=23 >db.table1.find().sort({"hid":}) --查询结果按hid字段顺序排序...>db.table1.find().sort({"hid":-1}) --查询结果按hid字段降序排序 >db.table1.find().limit() --查询前两条数据 >db.table1....find().skip() --查询第2条以后所有数据 >db.table1.find().limit().skip() --查询第2条以后后面3条数据 >db.table1.find({"hid...mongod启动时必须加上--repair才能启动成功) kill mongodb切换日志 运行时间长了,mongodb日志会很大,可以执行切换,生成新日志...,不影响primary环境服务,也不会切换primary环境日志 mongodb日志文件,重启后还在,且会把重启涉及关闭启动信息追加到这个日志文件 出处:http://blog.itpub.net

1K10

构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(4)- 变更服务

接下来,让我进行基于 tide + async-graphql + mongodb 开发 GraphQL 服务第二次重构。...,已经多了一个类型定义: 执行查询,我们看看返回结果: 变更服务 接下来,我们开发 GraphQL 变更服务。...示例,我们以模型 -> 服务 -> 总线顺序来开发。这个顺序并非固定,实际开发,可以根据自己习惯进行调整。...再者,我们将 NewUser 结构体插入 MongoDB 数据库后,应当返回插入结果。因此,我们还需要开发一个根据 username 或者 email 查询用户 GraphQL 服务。...[]; // 查询集合所有文档 let mut cursor = coll.find(None, None).await.unwrap(); // 数据游标结果迭代

1.6K31

MONGODB 出现问题怎么查找问题,三板斧

使用,我们几乎很少使用除复制集之外模式,所以我们连接到一个复制集中机器后,可以通过 --discover 来一个界面上展示三台或更多主机同一个时刻情况。...第三斧, 对数据库执行语句开启慢查询,获取慢查询语句,不同于其他数据库,MONGODB 查询本身并不是敞开,主要还是因为我们对MONGODB 查询要求比较苛刻,基本上500ms查询我们就要认为是慢查询需要进行查看如果不是聚合的话...1 到对应要收集慢查询数据库,打开慢查询 db.setProfilingLevel(1,{slowms:500}) #打开慢查询 db.system.profile.find().pretty...,可以将上次查询内容清空,然后初始化慢查询collection ,在打开慢查询接受慢查询语句。...获得慢查询后,可以通过下面的语句针对不同时间段查询信息,或者以满语句前10方式来查询查询数据。

75410

MongoDB高级应用之数据转存与恢复(5)

不影响查询功能,可以在后台运行 db.books.ensureIndex({name:1},{background:true}) 1.6、强制查询已经建立好索引 #后一个name为索引名,正序倒序依据建立索引规则...,否则会报错 db.books.find({name:"323book"}).hint({name:1}) 1.7、shell查看数据库已经建立索引 db.system.indexes.find(...) db.system.namespaces.find() 1.8、查询索引信息和查询状态信息 db.books.find({name:"123book"}).explain() 1.9、批量和精确删除索引...-d指明使用库 -c指明要导出表 -o指明要导出文件名 -csv指定导出csv格式 -q过滤导出 --type 把数据好testdbpersons导出 mongoexport...-o d:/testdb 3.4、运行时恢复 mongorestore.exe API:http://docs.mongodb.org/manual/reference/mongorestore 恢复数据库

47230

MongoDB 安装配置

MongoDB 是一个高性能,开源,无模式文档型数据库,采用C++开发,是当前NoSQL数据库中比较热门一种,许多场景下可用于替代传统关系型数据库或键/值存储方式 MongoDB使用BSON...推荐运行在64位平台,因为MongoDB32位模式运行时支持最大文件尺寸为2GB 1,特点和功能 1) 特点 高性能、易部署、易使用,存储数据非常方便。...查询指令使用JSON形式标记,可轻易查询文档内嵌对象及数组。 完整索引支持:包括文档内嵌对象及数组。Mongo查询优化器会分析查询表达式,并生成一个高效查询计划。...系统重启之后,由Mongo搭建持久化缓存层可以避免下层数据源 过载。...(官方) MongoDB学习笔记 mongod参数说明 MongoDB应用 MongoDB索引用法

1.2K40

深入浅出mongodb之实战

深入浅出mongodb(一)和深入浅出mongodb(二)两篇文章讲述了一些安装和使用基础知识,这篇文章小编将带你走进实战世界,真正体会项目中是怎么使用mongodb开发,让我们一起揭开它神秘面纱。...,我们可以启动项目看一下效果 cd backend npm i npm start 如果出现下面的结果说明我们启动成功了 $ npm start > backend@0.0.0 start C:\...,我们采用都是前后端分离状态,本地开发环境我们无法避免会遇到跨域[3]情况,我们这里设置允许所有的源访问 app.use("/*", function (req, res, next) {...实际上真正开发环境,如果我们这么设置允许所有的源都可以访问会有很多问题,我们可以使用cors[4]来代替它 当然如果在生产中我们采用nginx部署之后,就不存在跨域了?...查询物品及所属人员 localhost:3000/api/goose get ? 最后 本文结束,有什么问题和有错误地方,欢迎大家留言和评论,还有后续更新,下期更加精彩 ???

1.7K10

【译】如何提升 Rust 代码性能

mongodb 案例,标准化`MongoDB` 驱动微基准集[17]在这方面发挥了很好作用,特别是因为它允许在用其他编程语言编写MongoDB驱动之间进行比较。...该闭包将被多次运行,每次运行时间将被记录、分析,并包含在一个HTML报告。 在这个特定例子,设置涉及到创建tokio运行时,该运行时将用于基准测试其余部分。...一旦运行时被创建,设置就会继续进行,即填充我们实际基准查询MongoDB集合。由于这涉及到异步API使用,我们需要通过Runtime::block_on确保它们异步运行时上下文中执行。...实际测量部分,我们对设置时创建集合所有文档进行查询。 所有这些都准备好了(并且我们MongoDB实例正在运行),我们可以运行cargo bench来建立我们基线。输出结果将如下。...具体来看这个基准使用情况,Find::handle_response,查找操作使用它来反序列化服务端上response。

1.8K20

文章翻译:Node.js和Redis入门-安装与命令

在这个入门里,我们将介绍nodejs受欢迎以及有用Redis命令。 我们开始前,让我们来看看Redis不同平台上安装。..." : "expressjs", "database" : "mongoDB", "devops" : "jenkins" } Redis支持存储他们一个快照(键),而不是存储位字符串对。...redisClient.hmset("tools","webserver","expressjs","database","mongoDB","devops","jenkins",function(er...存储List和Set 你也可以存储像List和Set一样复杂数据结构。Set和List唯一不同时,List可以存储重复字段而Set不能。 下面是相关代码。...操作键值对 存储了键值后,Redis还允许你处理它们,比如删除键,查询是否存在以及设置失效时间。 查看键是否存在 你可以使用exist()函数来检测键是否存在。

1.2K20
领券