标签: mongodb-nodejs-driver

无法使用 Node.js 驱动程序在本地连接到 MongoDB 6.0 服务器

我刚刚开始学习 MongoDB,我正在尝试通过 MongoDB Server 6.0 在本地托管我的 Node.js 应用程序(不使用MongooseAtlas)。

我复制了 MongoDB 文档中给出的异步 JavaScript 代码。我确保在执行以下代码之前运行mongod :

MongoDB 服务器已启动 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)

localhost mongodb node.js async-await mongodb-nodejs-driver

5
推荐指数
1
解决办法
3317
查看次数

Mongodb 更新管道更新嵌套数组内元素的字段

我有一个包含此类对象的集合。

{
  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)

mongodb aggregation-framework mongodb-nodejs-driver

4
推荐指数
1
解决办法
1588
查看次数