MongoDB数据库中更新与删除数据
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。
MongoDB数据库中更新与删除数据的更多相关文章
- 在DataTable中更新、删除数据
/*在DataTable中选择记录*/ /* 向DataTable中插入记录如上,更新和删除如下: * ----但是在更新和删除前,首先要找出要更新和删除 ...
- 方法:查询MongoDB数据库中最新一条数据(JAVA)
使用JAVA语言查询MongoDB中某个数据库某个集合的最新一条数据: MongoCollection<Document> cpu = MongoClient.getDatabase(&q ...
- MongoDB数据库中查询数据(下)
MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...
- python 读取SQLServer数据插入到MongoDB数据库中
# -*- coding: utf-8 -*-import pyodbcimport osimport csvimport pymongofrom pymongo import ASCENDING, ...
- 在MongoDB数据库中查询数据(上)
在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...
- mongodb数据库中插入数据
mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...
- 如何将存储在MongoDB数据库中的数据导出到Excel中?
将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...
- ASP.NET网页动态添加、更新或删除数据行
ASP.NET网页动态添加.更新或删除数据行 看过此篇<ASP.NET网页动态添加数据行> http://www.cnblogs.com/insus/p/3247935.html的网友,也 ...
- SQL 必知必会·笔记<14>更新和删除数据
1. 更新数据 基本的UPDATE语句,由三部分组成: 要更新的表 列名和它们的新值 确定要更新那些行的过滤条件 更新单列示例: UPDATE Customers SET cust_email = ' ...
随机推荐
- java Future用法和意义一句话击破
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是void类型. 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使 ...
- Hash Table (youtube)
here is a link for youtube about hash table which is super good https://www.youtube.com/watch?v=h2d9 ...
- HDU6213
Chinese Zodiac Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- js之跑马灯广告
目标效果:每过1秒重复把广告的第一个字符放到最后,达到动态跑马灯效果 代码如下: <!DOCTYPE html> <html lang="en"> < ...
- 【读书笔记】iOS-iOS的UI自动化测试
1,Instruments iOS自带的自动化测试工具. 2,TuneupJs 最早的iOS自动化测试工具 https://github.com/alexvollmer/tuneup_js 3,yn ...
- python之装饰器(函数)
1. 装饰器 遵循的原则: 开闭原则: 对功能的扩展开放 对代码的修改是封闭 # 通用装饰器写法 # 存在的意义: 在不破坏原有函数和原有函数调用的基础上,给函数添加新的功能. def wrapp ...
- JavaScript与正则表达式
正则表达式的定义 正则表达式与字符串对象相关的方法 相关示例 一.正则表达式(regular expression简称res) 1.定义: 一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成 ...
- 【转】如何将MySQL数据目录更改为CentOS 7上的新位置
本文转载自:http://www.leftso.com/blog/362.html 介绍 数据库随着时间的推移而增长,有时超过了文件系统的空间.当它们与操作系统的其他部分位于同一分区上时,也可能遇到I ...
- Linux下的进程类别(内核线程、轻量级进程和用户进程)--Linux进程的管理与调度(四)
本文中出现的,内核线程,轻量级进程,用户进程,用户线程等概念,如果不太熟悉, 可以参见 内核线程.轻量级进程.用户线程三种线程概念解惑(线程≠轻量级进程) Linux进程类别 虽然我们在区分Linux ...
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
一.概念 代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道.如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法. ...