Nodejs MongoDB(2):修改使用
Nodejs MongoDB(2):修改使用
今天主要写有关更新操作的东西,前面第二篇已经有简单提过更新,今天主要讲更新,
补充: MongoDB默认监听端口是27170,但是MongoDB在启动服务的时候还会启动一个HTTP服务器,监听端口是28017,你可以通过”http://localhost:28017“ 来访问获取数据库管理信息,
当你用shell连接到某个数据库的时候,MongoDB服务器会自动将这个数据库连接赋值给全局变量db,这个变量是通过shell访问mongodb的主要入口,你可以通过直接运行db查看所指向的数据库,如下图:
下面开始说明修改:
1.<b>save()</b>
前面有提到添加数据的方法save()和insert()两个方法,其实save()也有修改的作用,当使用save的时候如果存在就修改,如下图:
2.<b>$set</b>
$set用来指定一个键的值,如果这个键不存在的时候会自动创建,如下图给ruby添加时间:
当然,如果觉得时间不对,可以再次修改,如图:
或许你会觉得date类型不好,那我们可以把它换成字符串类型,如图:
而且$set也可以修改内嵌文档这里就不演示了,如果你突然发现这个键不想要了怎么办呢,那就可以用$unset来删除,如图:
3.<b>$inc</b>
$inc可以用来增加或减少已有键的值,不存在时会自动创建一个键
假如我们给ruby这本书添加一个访问量,如下图:
{"$inc":{“num”:1}}这里的1表示每次增加1,如果是10就每次增加10
现在我们让这本书每次访问一次我们累加50(不太公平),如图
如果我们给负值它就会减少,如图:
$inc的只能用于整数、长整数、双精度浮点数,如果用在其他类型上面会操作失败,
4.<b>$push</b> $push主要用于对数组的操作,不能用在整数、字符串上面, 如果指定的键存在,那么$push会向已有的数组末尾中加入一个元素,要是没有就自动创建一个新的数组,如下图给Ruby这本书添加评论: <b>db.book.article.update({“title”:“Ruby”}, {"$push":{“comments”:{“name”:“Jim”, “content”:“Good Book!”}}});</b>
接着在给一条评论:
如果给数组添加值,我们可以使用$ne,如图:
有时候可以使用另外一个$addToSet,比如我们给这个用户添加邮箱:
5.<b>$pop</b>
$pop删除数组中的数据,你可以把数组看做队列或栈,可以从任何一端删除,1表示从尾部删除,-1表示从头部删除,如图:
6.<b>$pull</b>
$pull可以基于特定条件来删除元素,$pull就可以做到,如下图:
7.<b>upsert</b> upsert是一种特殊的更新,要是没有文档符合更新条件,就会依这个条件和更新文档为基础创建一个新的文档,如果找到了匹配的文档就正常更新,非常方便,可是怎么使用呢?前面有提过累加访问量的: <b>db.book.article.update({“title”,“Ruby”}, {"$inc":{“num”:1}});</b> 如果要使用upsert,只需要多添加一个参数而已: <b>db.book.article.update({“title”,“Ruby”}, {"$inc":{“num”:1}}, true);</b> 或许你会认为只是多个参数而已嘛,但是它这样会更高效,至于为什么高效这里就不说明了,
8.多文档更新 多文档更新是不是要用其他方法啊,不是,只要在update的第4个参数设置为true就可以了, <b>db.book.article.update({“title”,“Ruby”}, {"$inc":{“num”:1}}, true, true);</b> 默认是true,所以一般我们在使用的时候推荐显示表明是否需要,
到这里修改文档的大多数方法都写出来了,这些都要经常练习使用才能熟练,熟练了才能做到自己满足自己实际的需求,虽然Mongodb功能强大,尽量保持关系型数据库的众多特性,但是他并不是要具备所有的关系型数据库的功能,他尽可能地将服务端处理逻辑交给客户端(应用程序处理)),所以有时候特别复杂的功能可能他做不到,不过他这样精简的设计使得MongoDB获得了非常好的性能。
上面的演示例子中我的集合都是book.article、book.author,这种方式叫子集合, 子集合:组织集合的一种惯例是使用"."字符分开的按命名空间划分的子集合, 这样做的目的是为了使组织结构更明确,实际上book是不存在的(不需要存在),推荐使用子集合。 如果有写的不对的地方还请指出批评。
Node.js MongoDB(2): 修改使用
今天我们继续探讨如何在Node.js中使用MongoDB进行数据的更新操作。前面的文章已经简单介绍了如何添加数据,今天我们重点讲解如何修改数据。
MongoDB监听端口
MongoDB默认监听端口是27017,同时在启动服务时还会启动一个HTTP服务器,监听端口是28017。可以通过http://localhost:28017
来访问获取数据库管理信息。
当你通过shell连接到某个数据库时,MongoDB服务器会自动将该数据库连接赋值给全局变量db
,你可以通过直接运行db
来查看当前指向的数据库。
更新操作
1. 使用 save()
save()
方法不仅可以插入新数据,还可以在数据已存在的情况下进行更新。如果指定的文档存在,则会更新该文档;如果不存在,则会插入新文档。
const MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 更新或插入文档
collection.save({ title: 'Ruby' }, { name: 'John Doe' }, (err, result) => {
if (err) throw err;
console.log('Document updated or inserted');
client.close();
});
});
2. 使用 $set
$set
操作符用于指定一个键的值,如果该键不存在则会自动创建。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 设置或更新键值
collection.updateOne(
{ title: 'Ruby' },
{ $set: { publishedDate: new Date() } },
(err, result) => {
if (err) throw err;
console.log('Document updated');
client.close();
}
);
});
3. 使用 $inc
$inc
操作符用于增加或减少已有键的值,如果该键不存在则会自动创建。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 增加访问量
collection.updateOne(
{ title: 'Ruby' },
{ $inc: { views: 1 } },
(err, result) => {
if (err) throw err;
console.log('Document updated');
client.close();
}
);
});
4. 使用 $push
$push
主要用于对数组的操作,如果指定的键存在,则会向已有的数组末尾添加一个元素。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 添加评论
collection.updateOne(
{ title: 'Ruby' },
{ $push: { comments: { name: 'Jim', content: 'Good Book!' } } },
(err, result) => {
if (err) throw err;
console.log('Comment added');
client.close();
}
);
});
5. 使用 $pop
$pop
用于删除数组中的数据,1表示从尾部删除,-1表示从头部删除。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 删除最后一个评论
collection.updateOne(
{ title: 'Ruby' },
{ $pop: { comments: 1 } },
(err, result) => {
if (err) throw err;
console.log('Last comment removed');
client.close();
}
);
});
6. 使用 $pull
$pull
可以基于特定条件来删除数组中的元素。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 删除特定条件的评论
collection.updateOne(
{ title: 'Ruby' },
{ $pull: { comments: { name: 'Jim' } } },
(err, result) => {
if (err) throw err;
console.log('Comments removed');
client.close();
}
);
});
7. 使用 upsert
upsert
是一种特殊类型的更新,如果没有找到匹配的文档,则会根据更新条件和更新文档创建新的文档。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 更新或插入
collection.updateOne(
{ title: 'Ruby' },
{ $inc: { views: 1 } },
{ upsert: true },
(err, result) => {
if (err) throw err;
console.log('Document updated or inserted');
client.close();
}
);
});
8. 多文档更新
如果你想同时更新多个文档,可以在 update
方法的第四个参数中设置为 true
。
MongoClient.connect('mongodb://localhost:27017/mydatabase', (err, client) => {
if (err) throw err;
const db = client.db();
const collection = db.collection('book');
// 更新多个文档
collection.updateMany(
{ title: { $regex: /R/ } },
{ $inc: { views: 1 } },
(err, result) => {
if (err) throw err;
console.log(`${result.modifiedCount} documents updated`);
client.close();
}
);
});
以上就是Node.js中使用MongoDB进行数据更新的一些常见操作。希望这些示例代码能帮助你更好地理解和应用这些更新操作。
唉,mongodb权威指南上都有的
辛苦了, 感谢~~~
以下是对“Nodejs MongoDB(2): 修改使用”的内容总结,并附带一些示例代码:
更新操作
1. 使用 save()
方法
save()
方法可以用于插入新文档或更新现有文档。如果文档已经存在,则进行更新;如果不存在,则插入。
const doc = { title: "Node.js", author: "John Doe", published: new Date() };
await db.collection('books').save(doc);
2. 使用 $set
操作符
$set
操作符用于修改指定键的值。如果该键不存在,则会自动创建。
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $set: { author: "Jane Doe", publishDate: new Date() } }
);
3. 使用 $inc
操作符
$inc
操作符用于递增或递减字段的值。如果字段不存在,则会创建该字段。
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $inc: { views: 1 } }
);
4. 使用 $push
操作符
$push
操作符用于向数组字段添加元素。如果字段不存在,则会创建一个数组。
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $push: { comments: { name: "Jim", content: "Good book!" } } }
);
5. 使用 $pop
操作符
$pop
操作符用于从数组字段的开头或结尾删除元素。
// 删除第一个评论
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $pop: { comments: -1 } }
);
// 删除最后一个评论
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $pop: { comments: 1 } }
);
6. 使用 $pull
操作符
$pull
操作符用于基于特定条件删除数组中的元素。
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $pull: { comments: { name: "Jim" } } }
);
7. 使用 upsert
参数
upsert
参数用于如果找不到匹配的文档,则创建一个新文档。
await db.collection('books').updateOne(
{ title: "Node.js" },
{ $set: { author: "Jane Doe" } },
{ upsert: true }
);
8. 多文档更新
通过设置 multi
参数为 true
,可以更新多个文档。
await db.collection('books').updateMany(
{ author: "John Doe" },
{ $set: { author: "Jane Doe" } }
);
以上是MongoDB在Node.js中的一些基本更新操作示例。这些操作可以帮助你有效地管理和更新你的数据库文档。