MongoDB数据库中更新与删除数据

在MongoDB数据库中,可以使用Collection对象的update方法更新集合中的数据文档。使用方法如下所示:

collection.update(selector, document, [options], [callback]);

selector参数:该参数值为一个对象,用于查询需要更新的数据文档。该参数值指定的方法和我们前面使用的find方法中使用的selector参数值的指定方法完全相同。

document参数:该参数值为一个对象,用于指定用来更新的数据文档。

options参数:该参数值为一个对象,用于指定更新数据时使用的选项,下面介绍几个常用的选项属性:
  1. upsert 该属性值是一个布尔值,用于指定是否在跟新数据时执行upsert操作,所谓upsert操作是指当被更新的数据文档不存在时插入一条数据
文档的操作。该属性值默认为false。

2. multi: 该属性值也是一个布尔值,用于指定是否更新所有符合查询条件的数据文档。默认值为false(只更新第一条符合查询条件的数据文档)。

callback参数:用于指定更新数据操作执行结束时执行的回调函数,该回调函数的指定方法如下所示:

function(err, result){};

err参数为更新数据操作失败时抛出的错误对象,result参数值为一个整数值,代表成功更新的数据条数,当更新数据操作失败时该属性值为null。

首先我们还是一样先查看数据库中users集合中的所有数据如下,使用代码如下:

const mongo = require(‘mongodb‘);
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server(‘localhost‘, ‘27017‘, { auto_reconnect: true });
const db = new Db(‘dataDb‘, server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log(‘成功建立数据库连接‘);
    db.collection(‘users‘, function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 开始查询集合users
        collection.find({}).toArray(function(err, docs) {
          if (err) {
            throw err;
          } else {
            console.log(docs);
            db.close();
          }
        });
      }
    });
  }
});

如下图所示:

然后现在我们使用update方法来更新上面的数据,我想把 userName=‘空智‘的数据更新成‘龙恩0707‘,使用方法如下:

collection.update({}, {userName: ‘龙恩0707‘});

如下所有的代码:

const mongo = require(‘mongodb‘);
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server(‘localhost‘, ‘27017‘, { auto_reconnect: true });
const db = new Db(‘dataDb‘, server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log(‘成功建立数据库连接‘);
    db.collection(‘users‘, function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 开始查询集合users
        collection.update({}, {userName: ‘龙恩0707‘}, function(err, result) {
          if (err) {
            throw err;
          } else {
            collection.find({}).toArray(function(err, docs) {
              if (err) {
                throw err;
              } else {
                console.log(‘更新后的数据:‘);
                console.log(docs);
                db.close();
              }
            });
          }
        })
      }
    });
  }
});

执行运行结果如下所示:

如上可以看到只更新了第一条数据,那是因为options对象中的属性multi默认为false,如果需要更改所有的数据的话,需要指定options中的multi属性为true即可。需要在document参数值对象中使用$set原子操作符。

如下更改代码:

collection.update({}, {$set: {userName: ‘龙恩0707‘}}, {multi: true}, function(err, result) {});

如下所有代码:

const mongo = require(‘mongodb‘);
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server(‘localhost‘, ‘27017‘, { auto_reconnect: true });
const db = new Db(‘dataDb‘, server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log(‘成功建立数据库连接‘);
    db.collection(‘users‘, function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 开始查询集合users
        collection.update({}, {$set: {userName: ‘龙恩0707‘}}, {multi: true}, function(err, result) {
          if (err) {
            throw err;
          } else {
            collection.find({}).toArray(function(err, docs) {
              if (err) {
                throw err;
              } else {
                console.log(‘更新后的数据:‘);
                console.log(docs);
                db.close();
              }
            });
          }
        })
      }
    });
  }
});

运行结果如下:

3. 理解options对象中的upsert属性
如果将options参数值对象中的upsert属性值指定为true,那么会当集合中不存在符合查询条件的数据文档时,会将把document参数值对象插入到集合中。
现在我们再来看看在update方法中更新一条userName字段为 ‘aaa‘的数据文档,users集合中不存在该数据文档的,他会将把update方法中指定
document参数值对象插入到users集合中。如下代码:

collection.update({userName: ‘aaa‘}, {userName: ‘aaa‘}, {upsert: true}, function(err, result) {});

执行结果如下所示:

可以看到在窗口中显示users集合中被插入一条数据aaa;

4. remove()方法删除集合中的数据文档
该方法是删除集合中的数据文档,该方法使用如下所示:

collection.remove([selector], [options], [callback]);

selector参数用于查询需要删除的数据文档。
options参数值为一个对象,用于指定删除数据时使用的选项. 常用的选项属性值如下:
single: 属性值为一个布尔值,用于指定是否只删除第一条满足查询条件的数据文档,默认属性值为false。

callback参数用于指定更新数据操作执行结束时执行的回调函数,该回调函数指定的方法如下所示:

function(err, result) {}

err参数为删除数据操作失败时抛出的错误对象。result参数值为一个整数值,代表成功删除的数据条数,当删除数据失败时该属性值为null.

如下的demo,首选往goods这个集合中插入数据后,然后在删除前查询下数据有多少,查询完成后,继续执行删除操作,删除条件就是所有 price
为11的都删除掉;如下所有代码所示:

const mongo = require(‘mongodb‘);
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server(‘localhost‘, ‘27017‘, { auto_reconnect: true });
const db = new Db(‘dataDb‘, server, { safe: true });
var docs = [
  {type: ‘food‘, price: 11},
  {type: ‘food‘, price: 10},
  {type: ‘food‘, price: 9},
  {type: ‘food‘, price: 8},
  {type: ‘food‘, price: 7},
];
db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log(‘成功建立数据库连接‘);
    db.collection(‘goods‘, function(err, collection) {
      collection.insert(docs, function(err, docs) {
        if (err) {
          throw err;
        } else {
          collection.find({}).toArray(function(err, docs) {
            if (err) {
              throw err;
            } else {
              console.log(‘删除前的goods集合中的数据为如下:‘);
              console.log(docs);
            }
          });
        }
      });
      collection.remove({price: 11}, function(err, result) {
        if (err) {
          throw err;
        } else {
          collection.find({}).toArray(function(err, docs) {
            if (err) {
              throw err;
            } else {
              console.log(‘删除后的数据为:‘);
              console.log(docs);
              db.close();
            }
          });
        }
      });
    });
  }
});

如下图所示:

由于options参数对象中的single属性值默认为false,因此将删除所有满足查询条件的数据文档,如果将该属性值设置为true,那么将只删除第一条满足条件的数据文档。如下代码:

collection.remove({price: 10}, {single: true}, function(err, result) {});

如下图所示

5. findAndRemove方法查询并删除一条数据文档
使用该方法可以查询并删除一条数据文档,该方法使用方式如下所示:

collection.findAndRemove(selector, sort, [options], callback);

selector参数值为一个对象,用于查询需要删除的数据文档;
sort参数值为一个数组,用于指定当存在多条符合查询条件的数据文档时这些数据的排序方式。该数组包含两个元素,每个元素都为一个数组,
第一个元素值为用于排序的字段名,第二个元素值可以为1或-1,1 是升序, -1是降序。
options值为一个对象,用于指定删除数据时使用的选项属性。
callback参数 用于指定删除数据操作时结束执行的回调函数,该回调函数指定方法如下所示:

function(err, doc) {}

err参数值为删除数据操作失败时抛出的错误对象。
doc参数值为一个对象,代表删除的数据文档,当删除数据失败时该属性值为null。

原文地址:https://www.cnblogs.com/tugenhua0707/p/9241225.html

时间: 2024-07-30 02:05:35

MongoDB数据库中更新与删除数据的相关文章

在DataTable中更新、删除数据

/*在DataTable中选择记录*/            /* 向DataTable中插入记录如上,更新和删除如下:             * ----但是在更新和删除前,首先要找出要更新和删除的记录.             * 一种方法是遍历DataRow,搜索想要的记录,             * --〉然而更聪明的办法是使用DataTable.Select方法:table.Select();             * table.Select();//返回DataRow[],可

MongoDB数据库中查询数据(下)

在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一个对象,该对象中各属性名用来显示指定在查询结果中需要包含或排除的字段.该属性值可以为1或0,当属性值为1时,代表需要在查询结果中包含该字段,当属性值为0时,代表需要在查询结果中排除该字段.注意:在使用fields属性时,需要统一使用属性值1或属性值0来设置除_id字段之外的所有字段. 首先我们来看下数据库中有哪些数据,如下所示: 下面我

python 读取SQLServer数据插入到MongoDB数据库中

# -*- coding: utf-8 -*-import pyodbcimport osimport csvimport pymongofrom pymongo import ASCENDING, DESCENDINGfrom pymongo import MongoClientimport binascii '''连接mongoDB数据库'''client = MongoClient('10.20.4.79', 27017)#client = MongoClient('10.20.66.10

mongodb数据库中插入数据

一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: db.collection(collectionName, [options], [callback]); collectionName参数值是一个字符串,用于指定需要访问的集合名,该参数是必须填写的.options参数值为一个对象,用于指定访问该集合时使用的选项,使用的属性可以百度搜索下,选项比较多,用到的时候可以查下.call

在MongoDB数据库中查询数据(上)

在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.find(selector, [options]); selector值为一个对象,用于指定查询时使用的查询条件,options是可选的参数,该参数值是一个对象,用于指定查询数据时所选用的选项. find方法返回一个代表游标的Cursor对象,在该游标中包含了所有查询到的数据文档信息.可以使用Cursor对象的toArray方法获取所有查询到

MariaDB SQL 更新和删除数据

为了凸显数据库操作的更为重要的主题,以下内容置顶. 更新和删除数据的准则: 不要在执行UPDATE或DELETE时不使用WHERE子句,除非你真的打算更新或删除每一行. 确保每个表都有主键,并且只要有可能都将其用于WHERE子句. 在使用带有WHERE子句的UPDATE或DELETE之前,先用SELECT语句测试,确保过滤除了正确的记录. 在使用数据库时,实施参照完整性以便MariaDB不允许删除那些数据关联其他表中的数据的行. 更新数据 UPDATE customers SET cust_em

MySQL必知应会-第20章-更新和删除数据

第20章-更新和删除数据 本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据. 20.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE; 更新表中特定行; 更新表中所有行.下面分别对它们进行介绍.不要省略WHERE子句 在使用UPDATE时一定要注意细心.因为稍不注意,就会更新表中所有行.在使用这条语句前,请完整地阅读本节.UPDATE与安全 可以限制和控制UPDATE语句的使用,更多内容请参见第28章. UPDATE语句非常容易使用,

使用Amazon EMR和Apache Hudi在S3上插入,更新,删除数据

将数据存储在Amazon S3中可带来很多好处,包括规模.可靠性.成本效率等方面.最重要的是,你可以利用Amazon EMR中的Apache Spark,Hive和Presto之类的开源工具来处理和分析数据. 尽管这些工具功能强大,但是在处理需要进行增量数据处理以及记录级别插入,更新和删除场景时,仍然非常具有挑战. 与客户交谈时,我们发现有些场景需要处理对单条记录的增量更新,例如: 遵守数据隐私法规,在该法规中,用户选择忘记或更改应用程序对数据使用方式的协议. 使用流数据,当你必须要处理特定的数

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,