如何摆脱 MongoDB 回调和节点中的"result"、"insertedCount"和"insertedIds",只获取数据库对象的数组?



我只是在一段时间没有这样做后更新了Node,不得不重新安装MongoDB和其他模块。 以前我在使用 find(( 函数时只会获得一个数据库对象数组,现在我得到一个包含"results"、"ops"、"insertedCount"和"insertedIds"的 JSON 对象。 我不记得最初设置它时我可能做了什么,或者这只是 Mongo 的一个烦人的更改,但我想回到只获取一个数据库对象数组,这样我就不必测试我的整个服务器。 我已经尝试了几个 npm 解析模块但没有成功。

下面是一个示例:

{ result: { ok: 1, n: 1 },
ops:
[ { user: '595ee2fec2924e5435dfdd2d'},
_id: 595f0fe55e84fa2468b17ce8 } ],
insertedCount: 1,
insertedIds: [ 595f0fe55e84fa2468b17ce8 ] }

而以前,它只会返回:

[ { user: '595ee2fec2924e5435dfdd2d'},
_id: 595f0fe55e84fa2468b17ce8 } ]

您可以简单地获取 ops 数组。

result.ops;

您可能还需要确保正确遵循调用堆栈,因为这些对象仅在插入时返回。

您可以通过访问ops属性获取生成的对象并将其剥离为数组。

runMyQuery().then(function(res) {
return res.ops;
});

前面的示例做了很多假设,所以不要指望复制粘贴解决方案。

最正确的解决方案是继续使用package.json所依赖的所有内容的确切版本运行项目。

也就是说,我假设您遇到此问题是因为您在系统上本地运行 Node,并且需要将其升级为另一个项目或安全修复程序。如果是这种情况,您可能需要考虑使用 nvm 或 nodenv 等节点版本管理工具。这些允许您安装多个版本的 Node,并将它们与单个项目相关联,这样您就不会遇到兼容性问题。

对于更强大的变体,您可能希望使用虚拟机(如VirtualBox(或容器系统(如Docker(虚拟化整个开发环境。两者都允许你创建文件,用于定义预配 VM 或容器的方式(安装的操作系统、软件版本等(。它们是确保几个月甚至几年后回到项目时,它仍然会完全按照您离开的方式运行的最可靠方法。

听起来你无意中从MongoDB 3.X驱动程序升级到MongoDB 4.X驱动程序。 插入操作现在返回一个对开发人员更加友好的"InsertManyResult"对象。 不幸的是,据我所知,此更改并未提供有关重大更改的文档。

最新更新