Node.js Basics — Deleting and Updating MongoDB Documents
Tags: node, webdev, programming, javascript
Published: 2021-01-22 21:35:53

**Check out my books on Amazon at https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62**

**Subscribe to my email list now at http://jauyeung.net/subscribe/**


Node.js is a popular runtime platform to create programs that run on it.

It lets us run JavaScript outside the browser.

In this article, we’ll look at how to start using Node.js to create programs.

### Delete a Document

We can delete a document within our MongoDB collection.

To do that, we can write:

```
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);

const pizzaDocuments = [
  { name: "Sicilian pizza", shape: "square" },
  { name: "New York pizza", shape: "round" },
  { name: "Grandma pizza", shape: "square" },
];

async function run() {
  try {
    await client.connect();
    const testCollection = await client.db("test").collection('test');
    const result = await testCollection.insertMany(pizzaDocuments);
    console.log(result)
    const deleteResult = await testCollection.deleteOne({ name: { $type: "string" } });
    console.log(deleteResult)
  } finally {
    await client.close();
  }
}
run().catch(console.dir);
```

We pass in a query into the `deleteOne` method to delete all the entries with the `name` that has type string.

Also, we can delete all the entries with the `name` set to type `string` with the `deleteMany` method:

```
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);

const pizzaDocuments = [
  { name: "Sicilian pizza", shape: "square" },
  { name: "New York pizza", shape: "round" },
  { name: "Grandma pizza", shape: "square" },
];

async function run() {
  try {
    await client.connect();
    const testCollection = await client.db("test").collection('test');
    const result = await testCollection.insertMany(pizzaDocuments);
    console.log(result)
    const deleteResult = await testCollection.deleteMany({ name: { $type: "string" } });
    console.log(deleteResult)
  } finally {
    await client.close();
  }
}
run().catch(console.dir);
```

### Change a Document

We can update a document with thw `updateOne` method.

For example, we can write:

```
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);

const filter = { foo: 'bar' };
const updateDocument = {
  $set: {
    foo: 'baz',
  },
};

async function run() {
  try {
    await client.connect();
    const testCollection = await client.db("test").collection('test');
    const result = await testCollection.updateOne(filter, updateDocument);
    console.log(result)
  } finally {
    await client.close();
  }
}
run().catch(console.dir);
```

We call the `updateOne` method to find the item with the query object in the first argument.

The 2nd argument is the document to update the item with.

The `$set` property indicates that we want to add or update the key-value pair in the object we set as its value.

### Update Arrays in a Document

We can update arrays in a document by accessing its property.

For example, we can write:

```
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);

async function run() {
  try {
    await client.connect();
    const testCollection = await client.db("test").collection('test');
    const result = await testCollection.insertOne({
      name: "Popeye",
      address: "1 Sweethaven",
      items: [
        {
          type: "pizza",
          size: "large",
          toppings: ["garlic, spinach"],
        },
        {
          type: "calzone",
          toppings: ["ham"],
        },
      ],
    });
    console.log(result)
    const query = { name: "Popeye" };
    const updateDocument = {
      $set: { "items.0.toppings": "veggie" }
    };
    const updateResult = await testCollection.updateOne(query, updateDocument);
    console.log(updateResult)
  } finally {
    await client.close();
  }
}
run().catch(console.dir);
```

We call `insertOne` to add the entry we want into our collection.

Then we define the `updateDocument` object with the `$set` property to set the item we want.

`items.0.toppings` will get the `toppings` property of the first entry of`items` array and update it.

To match all array elements, we can use the `$[]` positional operator:

```
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);

async function run() {
  try {
    await client.connect();
    const testCollection = await client.db("test").collection('test');
    const result = await testCollection.insertOne({
      name: "Popeye",
      address: "1 Sweethaven",
      items: [
        {
          type: "pizza",
          size: "large",
          toppings: ["garlic, spinach"],
        },
        {
          type: "calzone",
          toppings: ["ham"],
        },
      ],
    });
    console.log(result)
    const query = { name: "Popeye" };
    const updateDocument = {
      $set: { "items.$[].toppings": "veggie" }
    };
    const updateResult = await testCollection.updateOne(query, updateDocument);
    console.log(updateResult)
  } finally {
    await client.close();
  }
}
run().catch(console.dir);
```

Now both items in the `items` array has `'veggie'` appended into it.

### Conclusion

We can delete a document and update an array in an existing document with the MongoDB driver.