javascript - mongodb nodejs驱动updateOne没有设置新值
问题描述
我正在尝试更新 mongodb 用户文档。如下
{
"_id":"123",
"email":"sam@example.com"
}
我想在此文档中添加一个字段“名称”。
我的代码如下
async function test() {
const user = {"_id":"123", "email" : "sam@example.com" };
async function setUsername(user, update) {
await userCollection.updateOne(user, update);
}
await setUsername(user, { $set: { name: "sam"} });
}
test();
但是,当我在数据库中看到时,我看不到文档中设置的字段。
我确定我以某种方式错过了节点驱动程序的实现方式,但我不确定这个问题。
我什至尝试过使用 upsert: true 选项,它给了我一个错误,因为文档已经存在。
解决方案
我想我把函数名给错了,而且我之前没有创建文档。
发布有效的最终片段:
const { MongoClient } = require("mongodb");
async function test() {
const mclient = await MongoClient.connect("mongodb://localhost:27017/?w=1", {
useNewUrlParser: true
});
const db = mclient.db("test");
const userCollection = db.collection("user");
const user = { _id: "123", email: "sam@example.com" };
function setUsername(user, update) {
return userCollection.updateOne(user, update);
}
await setUsername(user, { $set: { name: "sam" } });
}
(async () => {
test();
})();
推荐阅读
- graphql - 具有自定义类型属性的 DynamoDB 表的 Graphql 突变查询
- python - Conda:在从 YAML 文件创建环境之前指定环境变量
- c# - 当我离开页面时,控件 OnElementChanged() 会被调用吗?
- regex - 通配符匹配反向查找
- python - 由于未运行 TTY Django,因此跳过了超级用户创建。巴本贝壳
- assembly - x86-64 的条件跳转是如何工作的?
- f# - F# 中任何元组位置的简写
- node.js - socket.io anonymous callback: can't call class functions
- java - Gradle 的“maven”和“maven-publish”插件有什么区别?
- angular - 使用代理解决 CORS 问题在浏览器中有效,而不是在模拟器或设备上