问题标签 [mongodb-nodejs-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2489 浏览

mongodb - MongoError: Topology is closed, please connect 似乎与 MongoClient.close() 有关,客户端在使用时无法工作

这个问题在这里是密切相关的,但问题和答案根本不是很相关。但是,在该 OP 帖子的评论中,使用 .close() 存在困难......这就是相似之处的结束。

问题来自尝试使用直接 nodejs mongodb 驱动程序 3.9 创建 api。我在控制器中有客户端调用,因为将它放在服务器中并在需要时调用客户端会不断产生“连接错误”,所以这里它在控制器中以获得完整的上下文。

每当我在集合客户端调用中使用 .close() 时,它都会运行一次,然后之后的所有其他调用都会导致错误拓扑已关闭。所以,现在我把它注释掉了。我想知道是什么原因造成的,我做错了什么会导致这个错误?

每个驱动程序的文档说明使用它以及目的是什么,但它反复破坏了我的 api。

0 投票
1 回答
42 浏览

node.js - 如何从 nodejs mongodb 本机驱动程序中的嵌入文档中查找单个元素?

我想从 MongoDB 的嵌入式文档中找到一个元素。这是我在 MongoDB 中收集的用户文档:-

我的 nodejs 函数通过 nodejs 本机驱动程序从嵌入式文档中查找单个元素:-

但是这个函数的响应是:-

但预期的输出是: -

我该如何解决这个问题?

0 投票
0 回答
601 浏览

javascript - MongoDB Node.js 'ignoreUndefined' 选项什么都不做

在 Node.js MongoDB 模块中,{ignoreUndefined: true}作为MongoClient.connect方法的选项传递似乎没有做任何事情。我相信预期的行为应该是防止所有undefined数据字段null在写入数据库时​​取值(导致它们不被存储)。顺便说一句,传递{ignoreUndefined: true}给每个单独的 write 方法确实可以做到这一点。

那么,为什么传递{ignoreUndefined: true}connect方法不是“忽略未定义”?如果这不是预期的行为,那是什么?

0 投票
1 回答
176 浏览

javascript - $ 带有 upsert 的位置更新运算符

假设我有一系列商店:

我想将price商店中的商品 3 更新为 30,如果该商店中不存在商品,则在商店中插入新商品和/或在必要时插入新商店:

  • shop 0:简单地更新商品
  • 商店 1:附加{"_id": 3, "price": 30}到商店 1items
  • shop 2:将shop 2设置items[{"_id": 3, "price": 30}]
  • shop 3:插入文件{"_id": 3, "items": [{"_id": 3, "price": 30}]}

换句话说,我想:

  • collection.updateOne({_id: <shopId>, 'items._id': 3}, {$set: {'items.$.price': 30}})如果该项目存在(商店 0)
  • collection.updateOne({_id: <shopId>}, {$push: {items: {_id: 3, price: 30}}}, {upsert: true})如果没有(商店 1 到 3)

这有点像$with upsert,但文档明确指出upsert不能与它一起使用:

不要将位置运算符$与 upsert 操作一起使用,因为插入操作会$在插入的文档中将 用作字段名称。

$[<identifier>]也不起作用:

如果 upsert 操作不包括完全相等匹配并且没有找到要更新的匹配文档,则 upsert 操作将出错。

有没有办法做到这一点而不必多次访问数据库?


我尝试过的事情:

0 投票
1 回答
157 浏览

node.js - 存储 MongoClient.connect()

我从事一个项目,其代码分为多个 js 文件。到目前为止,我一直在调用MongoClient.connect()多次(在每个文件中使用 db)。那是我收到多个弃用警告的时候:

我很快发现它与所有这些打开的连接有关。即使我可以将 MongoClient 存储在单独的文件中,我该如何存储MongoClient.connect(),因为使用数据库的代码如下所示:

而不是这样:

0 投票
1 回答
33 浏览

mongodb - 有人可以解释这个 MongoClient.connect 代码是如何工作的吗?

有人可以在这里解释这个概念。我在代码中放了三个console.log,以了解这段代码是如何运行的。但是,我不明白为什么在 contestCount++ 移动到客户端 2 之前被调用了四次。(顺便说一下,竞赛集合中有四个文档)我希望代码从上到下一直循环然后循环再次回到顶部。谢谢

这是我从终端得到的

0 投票
1 回答
27 浏览

node.js - 处理类中的回调

我正在构建类来查找和快速操作 mongodb 文档上的操作。这是 UserCursor 类。(不是在谈论 MongoDB 的游标)

运行时,控制台返回

我认为您遇到了问题:构造函数中的 mongo 回调在_id操作后启动。由于每次使用该类时都会激活构造函数,我该如何管理它?

0 投票
1 回答
503 浏览

mongodb - mongodb客户端的“无法读取未定义的属性'替换'”

我正在尝试连接到 MongoDB Atlas 集群,但我的 react 应用程序出现问题。上await client.connect(),我明白了TypeError: Cannot read property 'replace' of undefined

我已经验证连接字符串可以通过 MongoDB Compass 工作。

我的 mongo.ts 文件

package.json 依赖项

0 投票
1 回答
21 浏览

node.js - Mongodb 通过本机 id 生成的 Node.js 后端查找记录

第一次使用 MongoDB。此查询在 cmd 行中对我有用:

但是,在我的节点服务器上使用基本相同的查询更新记录在 ping 时不会完成此任务。我试图在我的模型中查询这样的记录是错误的吗?ObjectId 显然不是我的服务器原生的。

0 投票
1 回答
69 浏览

node.js - 如何在 NodeJS 的 MongoDB 驱动程序中加入嵌套数组?

我正在使用 MongoDB shell 版本 v3.6.3。我有两个集合 1. 用户 2. 业务 我在下面给出了示例数据。

现在我想加入从saved_products用户集合到业务集合中的产品。

预期结果是:

当产品是单独的集合时(在查找和展开的帮助下),我能够做到这一点。但是这里的产品作为嵌套文档位于业务集合中。我怎样才能做到这一点。请帮帮我。