我刚刚开始学习 MongoDB,我正在尝试通过 MongoDB Server 6.0 在本地托管我的 Node.js 应用程序(不使用Mongoose或Atlas)。
我复制了 MongoDB 文档中给出的异步 JavaScript 代码。我确保在执行以下代码之前运行mongod :
MongoDB 服务器已启动

const { MongoClient } = require("mongodb");
// Connection URI
const uri =
"**mongodb://localhost:27017**";
// Create a new MongoClient
const client = new MongoClient(uri);
async function run() {
try {
// Connect the client to the server (optional starting in v4.7)
await client.connect();
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally { …Run Code Online (Sandbox Code Playgroud) 我有一个包含此类对象的集合。
{
materials: {
"m1": {
inventory: [
{
price: 100,
amount: 65
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,库存是层次结构深处的一个数组。我想更新amount它的字段。
我从客户端收到物料 ID ( "m1") 和库存索引 ( 0)。
我必须使用更新管道,因为我正在设置和取消设置本文档中的一些其他字段。
这是我尝试过的:
await products.findOneAndUpdate(filters, [
{
$set: {
"materials.m1.inventory.0.amount": 100,
},
},
]);
Run Code Online (Sandbox Code Playgroud)
但它在第 0 个元素内创建一个名为 0 的新字段,并设置amount该对象内部。所以生成的文档看起来像这样。
{
materials: {
"m1": {
inventory: [
{
0: {
amount: 100
}
price: 100,
amount: 65
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
而我想要的是这样的:
{
materials: {
"m1": {
inventory: [ …Run Code Online (Sandbox Code Playgroud)