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

时间:2022-03-28 16:08:01

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();
}
});
}
});
}
});

如下图所示:

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

然后现在我们使用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();
}
});
}
})
}
});
}
});

执行运行结果如下所示:

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

如上可以看到只更新了第一条数据,那是因为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();
}
});
}
})
}
});
}
});

运行结果如下:

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

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

执行结果如下所示:

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

可以看到在窗口中显示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();
}
});
}
});
});
}
});

如下图所示:

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

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

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

如下图所示

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

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

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

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

function(err, doc) {}

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

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

  1. 在DataTable中更新、删除数据

    /*在DataTable中选择记录*/            /* 向DataTable中插入记录如上,更新和删除如下:             * ----但是在更新和删除前,首先要找出要更新和删除 ...

  2. 方法:查询MongoDB数据库中最新一条数据(JAVA)

    使用JAVA语言查询MongoDB中某个数据库某个集合的最新一条数据: MongoCollection<Document> cpu = MongoClient.getDatabase(&q ...

  3. MongoDB数据库中查询数据&lpar;下&rpar;

    MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...

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

    # -*- coding: utf-8 -*-import pyodbcimport osimport csvimport pymongofrom pymongo import ASCENDING, ...

  5. 在MongoDB数据库中查询数据&lpar;上&rpar;

    在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...

  6. mongodb数据库中插入数据

    mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...

  7. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  8. ASP&period;NET网页动态添加、更新或删除数据行

    ASP.NET网页动态添加.更新或删除数据行 看过此篇<ASP.NET网页动态添加数据行> http://www.cnblogs.com/insus/p/3247935.html的网友,也 ...

  9. SQL 必知必会&&num;183&semi;笔记&lt&semi;14&gt&semi;更新和删除数据

    1. 更新数据 基本的UPDATE语句,由三部分组成: 要更新的表 列名和它们的新值 确定要更新那些行的过滤条件 更新单列示例: UPDATE Customers SET cust_email = ' ...

随机推荐

  1. RCP:给GEF编辑器添加网格和标尺。

    网格和标尺效果如上图所示. 添加网格比较简单,也可以自己实现,主要思路是为编辑器添加一个GridLayer.但是还是建议参考eclipse自己的GEF样例来实现. 需要注意两个部分: 1.重写org. ...

  2. Linux 网络编程详解十二

    UDP的特点 --无连接 --基于消息的数据传输服务 --不可靠 --UDP更加高效 UDP注意点 --UDP报文可能会丢失,重复 --UDP报文可能会乱序 --UDP缺乏流量控制(UDP缓冲区写满之 ...

  3. TcpClient类与TcpListener类

    TcpClient类 //构造方法1 TcpClient t = new TcpClient(); t.Connect(); //构造方法2 IPEndPoint iep = ); TcpClient ...

  4. Spring笔记——使用Spring进行面向切面(AOP)编程

    要进行AOP编程,首先我们要在spring的配置文件中引入aop命名空间: =================== Spring提供了两种切面声明方式,实际工作中我们可以选用其中一种: 1. 基于XM ...

  5. python内存管理

    python对象三要素: identity(值):对应于内存的地址,不可修改 type(类型):不可修改 value(值): mutable :可以修改 immutable:不可以修改 引用计数 当引 ...

  6. JVM 垃圾回收机制&lpar; 一&rpar; 回收对象的判定

    关于JVM 的垃圾回收机制,我们一般都没过多深入,因为JAVA 和 C++ 的一个很大区别就是,JAVA 帮我们做了垃圾回收,而不用像C++ 那么样手动进行回收,当然任何自动的东西都存在一定弊端,比如 ...

  7. tangent space与object space

    3d渲染每个网格(Mesh)的面都可配一个材质(Material),要想在一个面上显示出更多的细节,除了模型做的更精致,还可以使用法线贴图(Normal Texture). 法线向量(Normal V ...

  8. vue配置404页面

    { path:'*', name:"/404", component:cuowu } path星号表示没有这个路由 name表示去这个地址 component这个页面引入的时候叫的 ...

  9. (python)数据结构---字符串

    一.概述 由一个个字符组成的有序序列. 使用单引号.双引号.三引号引住的字符序列. 不可变.线性的数据结构. 二.字符串的相关操作 1.元素访问----下标 字符串是线性的数据结构,可以使用索引去访问 ...

  10. 包、继承、Super、方法重写

    1 包_继承 1.1 包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看出目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [ ...