MongoDB中的push操作详解(将文档插入到数组)

 更新时间:2022年11月11日 11:08:21   作者:爱游泳的老白  
$push操作符添加指定的值到数组中,下面这篇文章主要给大家介绍了关于MongoDB中push操作(将文档插入到数组)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1. 概述

在本教程中,我们将介绍如何在MongoDB中将文档插入到数组中。此外,我们将看到 $push$addToset 运算符用于将值添加到数组中的各种应用。

首先,我们将创建一个示例数据库、一个集合,并将虚拟数据插入其中。此外,我们将研究一些使用 $push 运算符更新文档的基本示例。稍后,我们还将讨论 $push$addtoSet 运算符的各种用例。

让我们深入研究在 MongoDB 中将文档插入数组的各种方法。

2. 数据库初始化

首先,让我们建立一个新的数据库baeldung和一个样本集合,orders:

use baeldung;
db.createCollection(orders);

现在让我们使用insertMany方法将一些文档添加到集合中:

db.orders.insertMany([
    {
        "customerId": 1023,
        "orderTimestamp": NumberLong("1646460073000"),
        "shippingDestination": "336, Street No.1 Pawai Mumbai",
        "purchaseOrder": 1000,
        "contactNumber":"9898987676",
        "items": [ 
            {
                "itemName": "BERGER",
                "quantity": 1,
                "price": 500
            },
            {
                "itemName": "VEG PIZZA",
                "quantity": 1,
                "price": 800
            } 
          ]
    },
    {
        "customerId": 1027,
        "orderTimestamp": NumberLong("1646460087000"),
        "shippingDestination": "445, Street No.2 Pawai Mumbai",
        "purchaseOrder": 2000,
        "contactNumber":"9898987676",
        "items": [ 
            {
               "itemName": "BERGER",
               "quantity": 1,
               "price": 500
            },
            {
               "itemName": "NON-VEG PIZZA",
               "quantity": 1,
               "price": 1200
            } 
          ]
    }
]);

如果插入成功,上面的命令将打印一个类似于下面的 JSON:

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("622300cc85e943405d04b567"),
	ObjectId("622300cc85e943405d04b568")
    ]
}

至此,我们已经成功建立了数据库和集合。我们将在所有示例中使用这个数据库和集合。

3. 使用 Mongo Query 进行推送操作

MongoDB 提供了各种类型的数组运算符来更新 MongoDB 文档中的数组。 MongoDB 中的 $push 运算符将值附加到数组的末尾。根据查询的类型,我们可以将$push运算符与updateOne、updateMany、findAndModify 等方法一起使用。

现在让我们看看使用*$push*运算符的 shell 查询:

db.orders.updateOne(
    {
        "customerId": 1023
    },
    {
        $push: {
            "items":{
                "itemName": "PIZZA MANIA",
                "quantity": 1,
                "price": 800
            }
        }
    });

上述查询将返回以下文档:

{
    "acknowledged":true,
    "matchedCount":1,
    "modifiedCount":1
}

现在让我们查看customerId 为 1023的文档。在这里,我们可以看到新项目插入到列表“ items ”的末尾:

{
    "customerId" : 1023,
    "orderTimestamp" : NumberLong("1646460073000"),
    "shippingDestination" : "336, Street No.1 Pawai Mumbai",
    "purchaseOrder" : 1000,
    "contactNumber" : "9898987676",
    "items" : [
        {
            "itemName" : "BERGER",
            "quantity" : 1,
	    "price" : 500
        },
	{
            "itemName" : "VEG PIZZA",
	    "quantity" : 1,
	    "price" : 800
	},
	{
	    "itemName" : "PIZZA MANIA",
	    "quantity" : 1,
	    "price" : 800
        }
    ]
}

4. 使用Java驱动代码进行推送操作

到目前为止,我们已经讨论了将文档推送到数组中的 MongoDB shell 查询。现在让我们使用 Java 代码实现推送更新查询。

在执行更新操作之前,我们先连接到 baeldung数据库中的orders集合:

mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("orders");

在这里,在这种情况下,我们连接到在 localhost 的默认端口 27017 上运行的 MongoDB。

4.1. 使用 DBObject

MongoDB Java 驱动程序提供对DBObject和BSON文档的支持。在这里,DBObject是 MongoDB 旧版驱动程序的一部分,但在较新版本的 MongoDB 中已弃用。

现在让我们看看 Java 驱动程序代码以将新值插入到数组中:

DBObject listItem = new BasicDBObject("items", new BasicDBObject("itemName", "PIZZA MANIA")
  .append("quantity", 1)
  .append("price", 800));
BasicDBObject searchFilter = new BasicDBObject("customerId", 1023);
BasicDBObject updateQuery = new BasicDBObject();
updateQuery.append("$push", listItem);
UpdateResult updateResult = collection.updateOne(searchFilter, updateQuery);

在上面的查询中,我们首先使用BasicDBObject创建了项目文档。在searchQuery 的基础上,对集合的文档进行过滤,并将值推送到数组中。

4.2. 使用 BSON 文档

BSON文档是访问 Java 中的 MongoDB 文档的新方法,它是使用较新的客户端堆栈构建的。org.bson.Document类不太复杂且更易于使用。

让我们使用org.bson.Document 类将值推送到数组“ items”中:

Document item = new Document()
  .append("itemName1", "PIZZA MANIA")
  .append("quantity", 1).append("price", 800);
UpdateResult updateResult = collection.updateOne(Filters.eq("customerId", 1023), Updates.push("items", item));

在这种情况下,BSON的实现类似于使用DBObject 运行的代码,更新也将是相同的。在这里,我们使用updateOne方法仅更新单个文档。

5. 使用 addToSet操作符

$addToSet运算符也可用于将值压入数组。仅当数组中不存在该值时,此运算符才添加值。否则,它只会忽略它。而推送运算符将推送值作为过滤条件以获取匹配。

需要注意的一个关键点是 $addToSet 运算符在重复项目的情况下不会推送值工作。另一方面,$push 运算符只是将值推送到数组中,而不考虑任何其他条件。

5.1. 使用addToSet运算符的 Shell 查询

$addToSet 运算符的 mongo shell 查询类似于 $push 运算符,但 $addToSet 不会在数组中插入重复值。

现在让我们检查一下 MongoDB 查询,以使用&$addToset*将值推送到数组中:

db.orders.updateOne(
    {
        "customerId": 1023
    },
    {
        $addToSet: {
            "items":{
                "itemName": "PASTA",
                "quantity": 1,
                "price": 1000
            }
        }
    });

在这种情况下,输出将如下所示:

{
    "acknowledged":true,
    "matchedCount":1,
    "modifiedCount":1
}

在这种情况下,我们使用了 $addToSet 运算符,只有当文档是唯一的时,才会将其推送到数组“items”中。

5.2. 使用addToSet运算符的 Java 驱动程序

$addToSet操作符提供了一种与推送操作符不同类型的数组更新操作:

Document item = new Document()
  .append("itemName1", "PIZZA MANIA")
  .append("quantity", 1).append("price", 800);
UpdateResult updateResult = collection
  .updateOne(Filters.eq("customerId", 1023), Updates.addToSet("items", item));
System.out.println("updateResult:- " + updateResult);

在上面的代码中,首先我们创建了文档“item”,在customerId过滤器的基础上,updateOne方法会尝试将文档“item”推送到数组“items”中。

6. 结论

在本文中,我们学习了使用 $push$addToSet 运算符将新值推送到数组中。首先,我们研究了 $push 运算符在 MongoDB shell 查询中的使用,然后我们讨论了相应的 Java 驱动程序代码。

总结

到此这篇关于MongoDB中的push操作详解的文章就介绍到这了,更多相关MongoDB push操作内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • Mongodb 利用mongoshell进行数据类型转换的实现方法

    Mongodb 利用mongoshell进行数据类型转换的实现方法

    下面小编就为大家分享一篇Mongodb 利用mongoshell进行数据类型转换的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • MongoDB安全及身份认证(实例讲解)

    MongoDB安全及身份认证(实例讲解)

    下面小编就为大家带来一篇MongoDB安全及身份认证(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Linux下MongoDB数据库实现自动备份详解

    Linux下MongoDB数据库实现自动备份详解

    这篇文章主要给大家介绍了在Linux系统下下MongoDB数据库实现自动备份的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • mongodb清除连接和日志的正确方法分享

    mongodb清除连接和日志的正确方法分享

    这篇文章主要给大家介绍了关于mongodb清除连接和日志的正确方法,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • MongoDB连接本地失败的原因及解决办法

    MongoDB连接本地失败的原因及解决办法

    这篇文章主要介绍了MongoDB连接本地失败解决办法,错误原因是没有启动mongo服务,所以启动失败,只要把mongo服务启动就好了,需要的朋友可以参考下
    2023-05-05
  • mongodb安装_动力节点Java学院整理

    mongodb安装_动力节点Java学院整理

    这篇文章主要介绍了mongodb安装,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Mongodb 数据类型及Mongoose常用CURD

    Mongodb 数据类型及Mongoose常用CURD

    MongoDB 是一个开源的 NoSQL 数据库,相比 MySQL 那样的关系型数据库,它更为轻巧、灵活,非常适合在数据规模很大、事务性不强的场合下使用,本文给大家介绍Mongodb 数据类型及Mongoose常用CURD,感兴趣的朋友一起学习吧
    2016-01-01
  • Win10 安装 MongoDB 3.6.5 失败的问题及解决方法

    Win10 安装 MongoDB 3.6.5 失败的问题及解决方法

    这篇文章主要介绍了Win10 安装 MongoDB 3.6.5 失败的问题及解决方法,需要的朋友可以参考下
    2018-05-05
  • MongoDB集合中的文档管理

    MongoDB集合中的文档管理

    这篇文章介绍了MongoDB集合中文档的管理方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Mongodb常用的身份验证方式

    Mongodb常用的身份验证方式

    对MongoDB部署启用访问控制会强制执行用户身份验证,要求在登录MongoDB系统用户识别自己。 当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。
    2017-08-08

最新评论

?


http://www.vxiaotou.com