问题标签 [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.
mongodb - MongoError: Topology is closed, please connect 似乎与 MongoClient.close() 有关,客户端在使用时无法工作
这个问题在这里是密切相关的,但问题和答案根本不是很相关。但是,在该 OP 帖子的评论中,使用 .close() 存在困难......这就是相似之处的结束。
问题来自尝试使用直接 nodejs mongodb 驱动程序 3.9 创建 api。我在控制器中有客户端调用,因为将它放在服务器中并在需要时调用客户端会不断产生“连接错误”,所以这里它在控制器中以获得完整的上下文。
每当我在集合客户端调用中使用 .close() 时,它都会运行一次,然后之后的所有其他调用都会导致错误拓扑已关闭。所以,现在我把它注释掉了。我想知道是什么原因造成的,我做错了什么会导致这个错误?
每个驱动程序的文档说明使用它以及目的是什么,但它反复破坏了我的 api。
node.js - 如何从 nodejs mongodb 本机驱动程序中的嵌入文档中查找单个元素?
我想从 MongoDB 的嵌入式文档中找到一个元素。这是我在 MongoDB 中收集的用户文档:-
我的 nodejs 函数通过 nodejs 本机驱动程序从嵌入式文档中查找单个元素:-
但是这个函数的响应是:-
但预期的输出是: -
我该如何解决这个问题?
javascript - MongoDB Node.js 'ignoreUndefined' 选项什么都不做
在 Node.js MongoDB 模块中,{ignoreUndefined: true}
作为MongoClient.connect
方法的选项传递似乎没有做任何事情。我相信预期的行为应该是防止所有undefined
数据字段null
在写入数据库时取值(导致它们不被存储)。顺便说一句,传递{ignoreUndefined: true}
给每个单独的 write 方法确实可以做到这一点。
那么,为什么传递{ignoreUndefined: true}
给connect
方法不是“忽略未定义”?如果这不是预期的行为,那是什么?
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 操作将出错。
有没有办法做到这一点而不必多次访问数据库?
我尝试过的事情:
node.js - 存储 MongoClient.connect()
我从事一个项目,其代码分为多个 js 文件。到目前为止,我一直在调用MongoClient.connect()
多次(在每个文件中使用 db)。那是我收到多个弃用警告的时候:
我很快发现它与所有这些打开的连接有关。即使我可以将 MongoClient 存储在单独的文件中,我该如何存储MongoClient.connect()
,因为使用数据库的代码如下所示:
而不是这样:
mongodb - 有人可以解释这个 MongoClient.connect 代码是如何工作的吗?
有人可以在这里解释这个概念。我在代码中放了三个console.log,以了解这段代码是如何运行的。但是,我不明白为什么在 contestCount++ 移动到客户端 2 之前被调用了四次。(顺便说一下,竞赛集合中有四个文档)我希望代码从上到下一直循环然后循环再次回到顶部。谢谢
这是我从终端得到的
node.js - 处理类中的回调
我正在构建类来查找和快速操作 mongodb 文档上的操作。这是 UserCursor 类。(不是在谈论 MongoDB 的游标)
运行时,控制台返回
我认为您遇到了问题:构造函数中的 mongo 回调在_id
操作后启动。由于每次使用该类时都会激活构造函数,我该如何管理它?
mongodb - mongodb客户端的“无法读取未定义的属性'替换'”
我正在尝试连接到 MongoDB Atlas 集群,但我的 react 应用程序出现问题。上await client.connect()
,我明白了TypeError: Cannot read property 'replace' of undefined
。
我已经验证连接字符串可以通过 MongoDB Compass 工作。
我的 mongo.ts 文件
package.json 依赖项
node.js - Mongodb 通过本机 id 生成的 Node.js 后端查找记录
第一次使用 MongoDB。此查询在 cmd 行中对我有用:
但是,在我的节点服务器上使用基本相同的查询更新记录在 ping 时不会完成此任务。我试图在我的模型中查询这样的记录是错误的吗?ObjectId 显然不是我的服务器原生的。
node.js - 如何在 NodeJS 的 MongoDB 驱动程序中加入嵌套数组?
我正在使用 MongoDB shell 版本 v3.6.3。我有两个集合 1. 用户 2. 业务 我在下面给出了示例数据。
现在我想加入从saved_products
用户集合到业务集合中的产品。
预期结果是:
当产品是单独的集合时(在查找和展开的帮助下),我能够做到这一点。但是这里的产品作为嵌套文档位于业务集合中。我怎样才能做到这一点。请帮帮我。