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数据库中更新与删除数据的更多相关文章

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

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

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

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

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

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

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

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

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

    在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.NET网页动态添加、更新或删除数据行

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

  9. SQL 必知必会·笔记<14>更新和删除数据

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

随机推荐

  1. IDEA新建javaWeb项目

    创建JavaWeb项目的步骤大致如下: 创建JavaWeb项目之前所需要的条件 - 安装jdk - 安装服务器(如:tomcat) - 安装idea 新建项目 New-->Project...

  2. How do I close a single buffer (out of many) in Vim?

    I open several files in Vim by, for example, running vim a/*.php which opens 23 files. I then make m ...

  3. Java - 线程池设计与选择

    http://ifeve.com/how-to-calculate-threadpool-size/ 任务一般可分为:CPU密集型.IO密集型.混合型,对于不同类型的任务需要分配不同大小的线程池. C ...

  4. SSM(Spring+SpringMvc+Mybatis)整合笔记

    1.使用开发工具 jdk1.8 eclipse Tomcat7.0 MySql 2.创建数据库和表,由于重点是整合,所以数据库就随意加几条数据. 3.创建动态Web项目(推荐使用Maven可以用配置来 ...

  5. numpy库的常用方法

    np.abs() 计算数组各元素的绝对值1 a= [0,1,2,3,4,-5,9,-3,12,-4] np.abs(a)out: array([ 0, 1, 2, 3, 4, 5, 9, 3, 12, ...

  6. js+bootstrap实现分页页码

    制作page.jsp,在其他页码引入,只需把最外层的form标签的id设置为myForm: 其中 totalPages:共有多少页:totalElements:共有有多少条记录:currentPage ...

  7. Oracle 11g数据库的创建

    由于是自己自学Oracle,如果有问题,请大家指出,谢谢! Oracle提供了DBCA来创建数据库,对于初学者来说使用DBCA创建数据库简化了很多工作和设置,直接在交互界面即可实现所有的功能. 然而对 ...

  8. 二层协议--LLDP协议总结

    二层协议--LLDP协议总结,待完善.

  9. 【转】MySQL:日期函数、时间函数总结(MySQL 5.X)

    转自:http://www.cnblogs.com/she27/articles/1377089.html 一.MySQL 获得当前日期时间 函数1.1 获得当前日期+时间(date + time)函 ...

  10. Fit项目图片上传和云存储的调通

    项目中关于动作的说明需要相应的配图,这样可以更直观的说明动作要点.本篇主要为项目中动作的新增和编辑做准备,确定适合场景的上传操作逻辑以及图片的存储和加载的方法. 一 上传方案 a) 本来所用的模板中是 ...