MongoDB Node.js 驱动:文档插入与更新操作详解
MongoDB 是一个流行的 NoSQL 数据库,而 Node.js 驱动是与 MongoDB 交互的重要工具。本文将详细介绍如何使用 MongoDB Node.js 驱动进行文档的插入和更新操作。
文档插入操作
基本插入方法
使用 insert()
方法可以向集合中插入一个或多个文档:
collection.insert(docs[[, options], callback])
参数说明:
docs
:可以是单个文档对象或文档数组options
:可选配置对象callback
:操作完成后的回调函数
示例代码:
var document = {name:"David", title:"About MongoDB"};
collection.insert(document, {w: 1}, function(err, records){
console.log("Record added as "+records[0]._id);
});
插入注意事项
- 如果尝试插入已存在
_id
的文档,操作会报错:
collection.insert({_id:1}, {w:1}, function(err, doc){
// 第一次插入成功
collection.insert({_id:1}, {w:1}, function(err, doc){
// 这里会报错,因为_id=1已存在
});
});
- 批量插入可以通过传入文档数组实现
文档保存操作
save方法简介
save()
方法是插入和更新的快捷方式:
collection.save({_id:"abc", user:"David"},{w:1}, callback)
特点:
- 如果设置了
_id
值:文档存在则更新,不存在则插入 - 如果未设置
_id
值:总是作为新文档插入
回调函数参数:
- 错误对象(如果有错误)
- 插入时返回文档对象,更新时返回1
文档更新操作
基本更新方法
使用 update()
方法更新文档:
collection.update(criteria, update[[, options], callback]);
参数说明:
criteria
:查询条件对象update
:更新内容对象options
:更新选项callback
:回调函数,接收三个参数(错误对象、修改数量、操作状态)
更新选项详解
更新操作支持以下选项:
| 选项名 | 说明 | 默认值 | |--------|------|--------| | multi
| 是否更新所有匹配文档 | false | | upsert
| 无匹配时是否插入新文档 | false | | raw
| 是否返回BSON二进制Buffer | false |
更新操作类型
- 完全替换:直接提供新文档对象
collection.update({_id:"123"}, {author:"Jessica", title:"Mongo facts"});
- 部分更新:使用
$set
操作符
collection.update({_id:"123"}, {$set: {author:"Jessica"}});
其他常用更新操作符:
$inc
:字段值增加$push
:向数组添加元素$pull
:从数组移除元素
查找并修改操作
findAndModify方法
findAndModify()
可以原子性地查找并修改单个文档:
collection.findAndModify(criteria[, sort[, update[, options]]], callback)
参数说明:
criteria
:查询条件sort
:匹配多个文档时的排序方式update
:更新内容options
:操作选项callback
:回调函数,接收错误对象和更新后的文档
操作选项
| 选项名 | 说明 | 默认值 | |--------|------|--------| | remove
| 是否删除找到的文档 | false | | new
| 是否返回修改后的文档 | false | | upsert
| 无匹配时是否插入 | false |
使用示例
db.collection('test').findAndModify(
{hello: 'world'}, // 查询条件
[['_id','asc']], // 排序方式
{$set: {hi: 'there'}}, // 更新操作
{}, // 选项
function(err, object) {
if (err){
console.warn(err.message);
}else{
console.dir(object);
}
});
最佳实践建议
- 批量操作:对于大量文档操作,考虑使用批量操作方法提高性能
- 错误处理:始终检查回调函数中的错误对象
- 写关注:根据业务需求合理设置写关注级别(w参数)
- 原子性:需要原子操作时使用findAndModify
- 性能优化:合理使用索引提高更新操作效率
通过掌握这些文档操作技巧,您可以更高效地使用MongoDB Node.js驱动进行数据管理。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考