Mongodb数据库中修改器$push和$addToSet的相同点和不同点

Mongodb数据库中修改器$push$addToSet的相同点和不同点


对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提供了一系列修改器的应用。下面是我理解并总结的的其中两个修改器的相同点和不同点。

1.相同点

  1. $push表示向指定的成员中追加内容(基本上都是数组),
    语法结构为:${'$push':{'成员':内容}}
    范例:向姓名为小七学生的课程中增加美术课程

    db.students.update({"name":"小七"},{"$push":{"course":"美术"}})

    在进行数据修改前,先查看姓名为小七的数据:

    db.students.find({"name":"小七"}).pretty()

    结果显示如下:
    小七的数据查询
    然后执行修改数据操作
    修改后的小七的数据
    可以看见原先小七数据中没有课程,执行修改操作后多了course数据。就说明,如果没有数组就重新创建数组。那么如果有数组后再执行操作了?

    db.students.update({"name":"小七"},{"$push":{"course":"舞蹈"}})

    这里写图片描述
    可以看出如果有,就直接数组内追加数据内容。
    那么如果添加的内容是一个数组呢,又会出现什么样的结果?

    db.students.update({"name":"小七"},{"$push":{"course":["数学","音乐"]}})

    这里写图片描述
    可以看到直接将数组追加到了课程中。

  2. $addToSet也表示向指定的成员中追加内容(与$push相似)。
    语法结构:${"$addToSet":{"成员":内容}}
    如果执行以上代码,其结构是一样的,大家可以自己试试。

2.不同点

但是两者是有区别的,$push是不进行数据过滤的,而$addToSet是进行数据过滤,简单的说就是$push不管你有没有,只要执行,就将内容追加到数组后面,而$addToSet看数组中有没有要追加的内容,如果有就不再追加,如果没有就进行追加。

为了方便看结果,先执行下面代码

db.students.update({"name":"小七"},{"$addToSet":{"course":"美术"}})

$addToSet后结果
可以看到执行代码后,数据内容没有在数组中追加,获取有人会说是不是$addToSet不管用呢,那么再执行下面的代码,看结果

db.students.update({"name":"小七"},{"$addToSet":{"course":"音乐"}})

这里写图片描述
可以看到数据追加到数组中。
接下来执行$push代码

db.students.update({"name":"小七"},{"$push":{"course":"美术"}})

这里写图片描述
可以看到之前小七的课程中就有美术课程,但执行了$push代码后,依然将美术课程追加到课程数组后。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Micronaut 使用 MongoClient 和 MongoCollection 操作 MongoDB 数据库,可以使用以下代码来查询某个字段: 首先,确保你已经在 `build.gradle` 文件添加了 MongoDB 驱动依赖。例如: ```groovy implementation("org.mongodb:mongodb-driver-sync:4.3.1") ``` 接下来,创建一个 MongoDB 的配置文件,例如 `application.yml`,添加 MongoDB 的连接信息: ```yaml mongodb: uri: mongodb://localhost:27017 database: mydatabase ``` 然后,创建一个 Repository 类来操作 MongoDB 数据库。在该类,你可以使用 MongoClient 和 MongoCollection 来查询某一个字段。例如: ```java import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import org.bson.Document; import javax.inject.Singleton; @Singleton public class MyRepository { private final MongoDatabase database; public MyRepository() { MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); database = mongoClient.getDatabase("mydatabase"); } public String findField(String fieldName) { MongoCollection<Document> collection = database.getCollection("mycollection"); MongoCursor<Document> cursor = collection.find().projection(new Document(fieldName, 1)).iterator(); StringBuilder result = new StringBuilder(); while (cursor.hasNext()) { Document document = cursor.next(); result.append(document.get(fieldName)).append("\n"); } return result.toString(); } } ``` 在上面的代码,我们首先创建了一个 MongoClient 对象,然后通过它获取到指定的数据库。在 `findField` 方法,我们获取到指定的集合,并使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值