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

1.1K50

MEAN-全堆栈javascript开发框架

引言 使用JavaScript能够完整迅速做出Web应用程序,目前一套工具包括MongoDB、ExpressJS,AngularJS和Node.js越来越受到欢迎,其开发的灵活性和易用性加快开发效率,简化开发者的工作...在今天你有很多架构可以选择建立一个Web应用,你需要的是快速开发,提高效率和注重健壮性,你需要的是更加精细更加敏捷的技术。 什么是MEAN? ?...在mongoDB中我们可以直接存储JSON格式的数据,然后在ExpressJS和的NodeJS服务器编写一个基于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缓存。

    3.1K10

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

    63030

    论MongoDB索引选择的重要性

    ,查询时会按 _id 排序,2个主要查询条件如下,先执行find命令,然后遍历cursor,读取所有满足条件的文档。...,总文档数超过1亿条 MongoDB的find、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.6K30

    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.5K40

    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

    1.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的方式来查询慢查询数据。

    78010

    深入浅出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

    MongoDB 安装配置

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

    1.2K40

    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 把数据好testdb中的persons导出 mongoexport...-o d:/testdb 3.4、运行时恢复 mongorestore.exe API:http://docs.mongodb.org/manual/reference/mongorestore 恢复数据库

    48830

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

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

    1.9K20

    文章翻译: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

    如何在CentOS 7上使用MEAN.JS安装MEAN堆栈

    介绍 MEAN是由以下组件组成的软件应用程序堆栈: MongoDB,一个支持服务器端JavaScript执行的NoSQL数据库 ExpressJS,一个Node.js Web应用程序框架 AngularJS...使用MongoDB,我们可以将文档存储为类似JSON的格式,在基于ExpressJS和NodeJS的服务器上编写JSON查询,并将JSON文档无缝传递到AngularJS前端。...更好的是,在客户端工作的人可以很容易地理解服务器端代码和数据库查询; 通过使用相同的语法和对象,您可以免于考虑多组语言最佳实践,并减少了理解代码库的入门门槛。...在本教程中,我们将安装社区版,可以免费下载。还有一个企业版,但这需要许可证,所以我们不会在这里处理它。 在发布时,MongoDB 3.2是最新的稳定版,可供下载和安装。...首先,添加stable分支的存储库。您可以通过访问浏览器中的URL,使用以下命令在执行脚本之前读取脚本的内容。

    1.2K00

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券