Mongodb 集合插入文档自动生成ObjectId

插入单个文档

Mongodb 使用以下几种方法来插入文档 , Mongodb V5.0+ 使用 mongosh 客户端:

  • 插入单个文档
    db.collection.insertOne() 将单个 文档插入到集合中。

如果该集合当前不存在,则插入操作将创建该集合。

如果文档未指定_id字段,则将在插入之前 mongod 添加该字段并为文档_id分配唯一的字段 。

insertOne() 方法具有以下语法:

db.collection.insertOne(<document>,{writeConcern: <document>}
)

注意,不同版本下面的 ObjectId 可选参数有差异,以下基于为 V4.4 版本:

ObjectId(<hexadecimal>) 返回新的ObjectId值。12 字节的ObjectId 值包括:

  • 一个 4 字节时间戳值,表示 ObjectId 的创建,以 Unix 纪元以来的秒数为单位。

  • 每个进程生成一次的 5 字节随机值。该随机值对于机器和进程来说是唯一的。

  • 一个 3 字节递增计数器,初始化为随机值。

以下示例获取 objectId()。 如 ObjectId(“64e2fb51bbd8c3243e14f05c”) ,其中

  • 64e2fb51: 对应十进制 1692597073( “2023-8-21 13:51:13” )即 UTC ( “2023-08-21T05:51:13Z” )。
    0110 0100 = 64
    1110 0010 = e2
    1111 1011 = fb
    0101 0001 = 51

(十六进制)64e2fb51 = 6*167 + 4*166 + 14*165 + 2*164 + 15*163 + 11*162 + 5*161 + 1*160
= 1610612736 + 67108864 + 14680064 + 131072 + 61440 + 2816 + 80 + 1
= 1692597073 (十进制)

  • bbd8c3243e: 每个进程生成一次的 5 字节随机值。
  • 14f05c: 一个 3 字节递增计数器。
sit_rs1:PRIMARY> x = ObjectId(); print(x);  x.getTimestamp()
ObjectId("64e2fb51bbd8c3243e14f05c")
ISODate("2023-08-21T05:51:13Z")sit_rs1:PRIMARY> x = ObjectId(); print(x);  x.getTimestamp()
ObjectId("64e2fb53bbd8c3243e14f05d")
ISODate("2023-08-21T05:51:15Z")sit_rs1:PRIMARY> x = ObjectId(); print(x);  x.getTimestamp()
ObjectId("64e2fb53bbd8c3243e14f05e")
ISODate("2023-08-21T05:51:15Z")sit_rs1:PRIMARY> x = ObjectId(); print(x);  x.getTimestamp()
ObjectId("64e2fb56bbd8c3243e14f05f")
ISODate("2023-08-21T05:51:18Z")

尽管对象ID值应该随着时间的推移而增加,它们不一定是单调的。

这是因为他们:

  • 仅包含一秒的时间分辨率,因此对象ID在同一秒内创建的值没有保证的顺序。

  • 由客户端生成,这些客户端可能具有不同的系统时钟。

以下示例将新文档插入到 order2 集合中。如果文档未指定_id字段,MongoDB 会将_id具有 ObjectId 值的字段添加到新文档中,如下:

sit_rs1:PRIMARY> db.order2.insertOne({ cust_id: "A", ord_date: new Date("2023-06-01"), price: 15, items: [ { sku: "apple", qty: 5, price: 2.5 }, { sku: "apples", qty: 5, price: 2.5 } ], status: "1" }); 
{"acknowledged" : true,"insertedId" : ObjectId("64e31b9bbbd8c3243e14f060")
}sit_rs1:PRIMARY> db.order2.find()
{ "_id" : ObjectId("64e31b9bbbd8c3243e14f060"), "cust_id" : "A", "ord_date" : ISODate("2023-06-01T00:00:00Z"), "price" : 15, "items" : [ { "sku" : "apple", "qty" : 5, "price" : 2.5 }, { "sku" : "apples", "qty" : 5, "price" : 2.5 } ], "status" : "1" }

插入多个文档

db.collection.insertMany() 可以将多个 文档插入到集合中。将文档数组传递给该方法。

insertMany() 方法具有以下语法:

db.collection.insertMany([ <document 1> , <document 2>, ... ],{writeConcern: <document>,ordered: <boolean>}
)

如果ordered设置为 false,文档将以无序格式插入,并且可以重新排序以mongod提高性能。如果使用无序,应用程序不应依赖于插入的顺序

在分片集合上执行ordered操作列表通常比执行 unordered列表慢,因为对于有序列表,每个操作都必须等待前一个操作完成。

排除Write Concern错误,有序操作在发生错误后停止 !!!!!!!!!,而无序操作继续处理队列中任何剩余的写操作。

以下示例将三个新文档插入到 order2 集合中。如果文档未指定 _id字段,MongoDB 会_id向每个文档添加带有 ObjectId 值的字段

sit_rs1:PRIMARY> db.order2.insertMany([   
...    { cust_id: "A", ord_date: new Date("2023-06-08"), price: 60, items: [ { sku: "apple", qty: 8, price: 2.5 }, { sku: "banana", qty: 5, price: 10 } ], status: "1" },
...    { cust_id: "B", ord_date: new Date("2023-06-08"), price: 55, items: [ { sku: "apple", qty: 10, price: 2.5 }, { sku: "pears", qty: 10, price: 2.5 } ], status: "1" },
...    { cust_id: "B", ord_date: new Date("2023-06-18"), price: 26, items: [ { sku: "apple", qty: 10, price: 2.5 } ], status: "1" },
...    { cust_id: "B", ord_date: new Date("2023-06-19"), price: 40, items: [ { sku: "banana", qty: 5, price: 10 } ], status: "1"},
...    { cust_id: "C", ord_date: new Date("2023-06-19"), price: 38, items: [ { sku: "carrots", qty: 10, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "1" },
...    { cust_id: "C", ord_date: new Date("2023-06-20"), price: 21, items: [ { sku: "apple", qty: 10, price: 2.5 } ], status: "1" },
...    { cust_id: "D", ord_date: new Date("2023-06-20"), price: 76, items: [ { sku: "banana", qty: 5, price: 10 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "1" },
...    { cust_id: "D", ord_date: new Date("2023-06-20"), price: 51, items: [ { sku: "carrots", qty: 5, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 }, { sku: "apple", qty: 10, price: 2.5 } ], status: "1" },
...    { cust_id: "D", ord_date: new Date("2023-06-23"), price: 23, items: [ { sku: "apple", qty: 10, price: 2.5 } ], status: "1" }
... ])
{"acknowledged" : true,"insertedIds" : [ObjectId("64e31cb0bbd8c3243e14f061"),ObjectId("64e31cb0bbd8c3243e14f062"),ObjectId("64e31cb0bbd8c3243e14f063"),ObjectId("64e31cb0bbd8c3243e14f064"),ObjectId("64e31cb0bbd8c3243e14f065"),ObjectId("64e31cb0bbd8c3243e14f066"),ObjectId("64e31cb0bbd8c3243e14f067"),ObjectId("64e31cb0bbd8c3243e14f068"),ObjectId("64e31cb0bbd8c3243e14f069")]
}sit_rs1:PRIMARY> db.order2.find()
{ "_id" : ObjectId("64e31b9bbbd8c3243e14f060"), "cust_id" : "A", "ord_date" : ISODate("2023-06-01T00:00:00Z"), "price" : 15, "items" : [ { "sku" : "apple", "qty" : 5, "price" : 2.5 }, { "sku" : "apples", "qty" : 5, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f061"), "cust_id" : "A", "ord_date" : ISODate("2023-06-08T00:00:00Z"), "price" : 60, "items" : [ { "sku" : "apple", "qty" : 8, "price" : 2.5 }, { "sku" : "banana", "qty" : 5, "price" : 10 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f062"), "cust_id" : "B", "ord_date" : ISODate("2023-06-08T00:00:00Z"), "price" : 55, "items" : [ { "sku" : "apple", "qty" : 10, "price" : 2.5 }, { "sku" : "pears", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f063"), "cust_id" : "B", "ord_date" : ISODate("2023-06-18T00:00:00Z"), "price" : 26, "items" : [ { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f064"), "cust_id" : "B", "ord_date" : ISODate("2023-06-19T00:00:00Z"), "price" : 40, "items" : [ { "sku" : "banana", "qty" : 5, "price" : 10 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f065"), "cust_id" : "C", "ord_date" : ISODate("2023-06-19T00:00:00Z"), "price" : 38, "items" : [ { "sku" : "carrots", "qty" : 10, "price" : 1 }, { "sku" : "apples", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f066"), "cust_id" : "C", "ord_date" : ISODate("2023-06-20T00:00:00Z"), "price" : 21, "items" : [ { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f067"), "cust_id" : "D", "ord_date" : ISODate("2023-06-20T00:00:00Z"), "price" : 76, "items" : [ { "sku" : "banana", "qty" : 5, "price" : 10 }, { "sku" : "apples", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f068"), "cust_id" : "D", "ord_date" : ISODate("2023-06-20T00:00:00Z"), "price" : 51, "items" : [ { "sku" : "carrots", "qty" : 5, "price" : 1 }, { "sku" : "apples", "qty" : 10, "price" : 2.5 }, { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : ObjectId("64e31cb0bbd8c3243e14f069"), "cust_id" : "D", "ord_date" : ISODate("2023-06-23T00:00:00Z"), "price" : 23, "items" : [ { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }

无序插入,以下尝试插入带有_id 字段 和 的多个文档 ordered: false。文档数组包含两个具有重复_id字段的文档。如下:

其中 “_id” : 2, “_id” : 6 主键冲突错误 (duplicate key error),其它文档插入成功 。

sit_rs1:PRIMARY> try {
...    db.order2.insertMany([
...    { _id: 1, cust_id: "A", ord_date: new Date("2023-06-01"), price: 15, items: [ { sku: "apple", qty: 5, price: 2.5 }, { sku: "apples", qty: 5, price: 2.5 } ], status: "1" },
...    { _id: 2, cust_id: "A", ord_date: new Date("2023-06-08"), price: 60, items: [ { sku: "apple", qty: 8, price: 2.5 }, { sku: "banana", qty: 5, price: 10 } ], status: "1" },
...    { _id: 2, cust_id: "B", ord_date: new Date("2023-06-08"), price: 55, items: [ { sku: "apple", qty: 10, price: 2.5 }, { sku: "pears", qty: 10, price: 2.5 } ], status: "1" },
...    { _id: 4, cust_id: "B", ord_date: new Date("2023-06-18"), price: 26, items: [ { sku: "apple", qty: 10, price: 2.5 } ], status: "1" },
...    { _id: 5, cust_id: "B", ord_date: new Date("2023-06-19"), price: 40, items: [ { sku: "banana", qty: 5, price: 10 } ], status: "1"},
...    { _id: 6, cust_id: "C", ord_date: new Date("2023-06-19"), price: 38, items: [ { sku: "carrots", qty: 10, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "1" },
...    { _id: 6, cust_id: "C", ord_date: new Date("2023-06-20"), price: 21, items: [ { sku: "apple", qty: 10, price: 2.5 } ], status: "1" },
...    { _id: 8, cust_id: "D", ord_date: new Date("2023-06-20"), price: 76, items: [ { sku: "banana", qty: 5, price: 10 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "1" },
...    { _id: 9, cust_id: "D", ord_date: new Date("2023-06-20"), price: 51, items: [ { sku: "carrots", qty: 5, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 }, { sku: "apple", qty: 10, price: 2.5 } ], status: "1" },
...    { _id: 10, cust_id: "D", ord_date: new Date("2023-06-23"), price: 23, items: [ { sku: "apple", qty: 10, price: 2.5 } ], status: "1" }
... ], { ordered: false });
... } catch (e) {
...    print (e);
... }
BulkWriteError({"writeErrors" : [{"index" : 2,"code" : 11000,"errmsg" : "E11000 duplicate key error collection: test.order2 index: _id_ dup key: { _id: 2.0 }","op" : {"_id" : 2,"cust_id" : "B","ord_date" : ISODate("2023-06-08T00:00:00Z"),"price" : 55,"items" : [{"sku" : "apple","qty" : 10,"price" : 2.5},{"sku" : "pears","qty" : 10,"price" : 2.5}],"status" : "1"}},{"index" : 6,"code" : 11000,"errmsg" : "E11000 duplicate key error collection: test.order2 index: _id_ dup key: { _id: 6.0 }","op" : {"_id" : 6,"cust_id" : "C","ord_date" : ISODate("2023-06-20T00:00:00Z"),"price" : 21,"items" : [{"sku" : "apple","qty" : 10,"price" : 2.5}],"status" : "1"}}],"writeConcernErrors" : [ ],"nInserted" : 8,"nUpserted" : 0,"nMatched" : 0,"nModified" : 0,"nRemoved" : 0,"upserted" : [ ]
})sit_rs1:PRIMARY> db.order2.find()
{ "_id" : 1, "cust_id" : "A", "ord_date" : ISODate("2023-06-01T00:00:00Z"), "price" : 15, "items" : [ { "sku" : "apple", "qty" : 5, "price" : 2.5 }, { "sku" : "apples", "qty" : 5, "price" : 2.5 } ], "status" : "1" }
{ "_id" : 2, "cust_id" : "A", "ord_date" : ISODate("2023-06-08T00:00:00Z"), "price" : 60, "items" : [ { "sku" : "apple", "qty" : 8, "price" : 2.5 }, { "sku" : "banana", "qty" : 5, "price" : 10 } ], "status" : "1" }
{ "_id" : 4, "cust_id" : "B", "ord_date" : ISODate("2023-06-18T00:00:00Z"), "price" : 26, "items" : [ { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : 5, "cust_id" : "B", "ord_date" : ISODate("2023-06-19T00:00:00Z"), "price" : 40, "items" : [ { "sku" : "banana", "qty" : 5, "price" : 10 } ], "status" : "1" }
{ "_id" : 6, "cust_id" : "C", "ord_date" : ISODate("2023-06-19T00:00:00Z"), "price" : 38, "items" : [ { "sku" : "carrots", "qty" : 10, "price" : 1 }, { "sku" : "apples", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : 8, "cust_id" : "D", "ord_date" : ISODate("2023-06-20T00:00:00Z"), "price" : 76, "items" : [ { "sku" : "banana", "qty" : 5, "price" : 10 }, { "sku" : "apples", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : 9, "cust_id" : "D", "ord_date" : ISODate("2023-06-20T00:00:00Z"), "price" : 51, "items" : [ { "sku" : "carrots", "qty" : 5, "price" : 1 }, { "sku" : "apples", "qty" : 10, "price" : 2.5 }, { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }
{ "_id" : 10, "cust_id" : "D", "ord_date" : ISODate("2023-06-23T00:00:00Z"), "price" : 23, "items" : [ { "sku" : "apple", "qty" : 10, "price" : 2.5 } ], "status" : "1" }

插入的附加方法

以下方法还可以将新文档添加到集合中:

db.collection.updateOne() 与选项一起使用时upsert: true。

db.collection.updateMany() 与选项一起使用时upsert: true。

db.collection.findAndModify() 与选项一起使用时upsert: true。

db.collection.findOneAndUpdate() 与选项一起使用时 upsert: true。

db.collection.findOneAndReplace() 与选项一起使用时 upsert: true。

db.collection.bulkWrite().

以上方法可以参考 以下的文章 :

(1)Mongodb 更新集合的方法到底有几种 (上) ?
(2)Mongodb 更新集合的方法到底有几种 (中) ?
(3)Mongodb 更新集合的方法到底有几种 (下) ?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL每日一练--销售管理系统

一&#xff0c;创建数据库SaleSys 二&#xff0c;在数据库SaleSys中创建3张表 品牌信息表&#xff08;brand&#xff09; BrandId --品牌编号&#xff0c;整型&#xff0c;自动增长&#xff0c;主键BrandName --品牌名称&#xff0c;字符型&#xff0c; 唯一约束 商品表…

JavaScript Es6_3笔记

JavaScript 进阶 文章目录 JavaScript 进阶编程思想面向过程面向对象 构造函数原型对象constructor 属性对象原型原型继承原型链 了解构造函数原型对象的语法特征&#xff0c;掌握 JavaScript 中面向对象编程的实现方式&#xff0c;基于面向对象编程思想实现 DOM 操作的封装。 …

若依Cloud集成Flowable6.7.2

项目简介 基于若依Cloud的Jove-Fast微服务项目&#xff0c;集成工作流flowable(接上篇文章) 若依Cloud集成积木报表 项目地址&#xff1a;https://gitee.com/wxjstudy/jove-fast 后端 新建模块 目录结构如下: 引入依赖 前提:引入依赖之前先配置好maven的setting.xml &…

ES 7.6 - APi基础操作篇

ES7.6-APi基础操作篇 前言相关知识索引相关创建索引查询索引查询所有索引删除索引关闭与打开索引关闭索引打开索引 冻结与解冻索引冻结索引解冻索引 映射相关创建映射查看映射新增字段映射 文档相关(CURD)新增文档根据ID查询修改文档全量覆盖根据ID选择性修改根据条件批量更新 …

uniapp 禁止遮罩层下的页面滚动

使用 touchmove.stop.prevent"toMoveHandle" 事件修饰符 若需要禁止蒙版下的页面滚动&#xff0c;可使用 touchmove.stop.prevent"moveHandle"&#xff0c;moveHandle 可以用来处理 touchmove 的事件&#xff0c;也可以是一个空函数。将这个方法直接丢到弹…

vue3鼠标拖拽滑动效果

第一步 在utils下面新建一个directives.js文件&#xff0c;然后引入如下代码 const dragscroll (el) > {el.onmousedown ev > {const disX ev.clientX;const disY ev.clientY; // 需要上下移动可以加const originalScrollLeft el.scrollLeft;const originalScroll…

iOS开发之查看静态库(.a/.framework)中包含的.o文件和函数符号(ar,nm命令)

.a/.framework其实是把编译生成的.o文件&#xff0c;打包成一个.a/.framework文件。a的意思是archive/归档的意思。 查看静态库.a文件包含的内容用下面的命令解压&#xff1a; ar x xxx.a 用ar命令打包静态库&#xff1a; 参数r是将后面的*.o或者*.a文件添加到目标文件中 参数…

Spring Boot Dubbo Zookeeper

文章目录 Spring Boot Dubbo Zookeeper简介DubboCommonProviderConsumer Zookeeper Spring Boot Dubbo Zookeeper 简介 Dubbo Common 公共依赖 <!-- Spring Boot Starter --> <dependency><groupId>org.springframework.boot</groupId><artifac…

微信小程序教学系列(2)

第二章&#xff1a;小程序开发基础 1. 小程序页面布局与样式 在小程序开发中&#xff0c;我们可以使用 WXML&#xff08;WeiXin Markup Language&#xff09;和 WXSS&#xff08;WeiXin Style Sheet&#xff09;来定义页面的布局和样式。 1.1 WXML基础 WXML 是一种类似于 H…

Python Opencv实践 - 图像直方图自适应均衡化

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/cat.jpg", cv.IMREAD_GRAYSCALE) print(img.shape)#整幅图像做普通的直方图均衡化 img_hist_equalized cv.equalizeHist(img)#图像直方图自适应均衡化 #1. 创…

laravel实现AMQP(rabbitmq)生产者以及消费者

基于php-amqplib/php-amqplib组件适配laravel框架的amqp封装库 支持便捷可配置的队列工作模式 官网详情 在此基础上可支持延迟消息、死信队列等机制。 环境要求&#xff1a; PHP版本: ^7.3|^8.0 需要开启的扩展: socket 其他: 如果需要实现延迟任务需要安装对应版本的ra…

js中?.、??、??=的用法及使用场景

上面这个错误&#xff0c;相信前端开发工程师应该经常遇到吧&#xff0c;要么是自己考虑不全造成的&#xff0c;要么是后端开发人员丢失数据或者传输错误数据类型造成的。因此对数据访问时的非空判断就变成了一件很繁琐且重要的事情&#xff0c;下面就介绍ES6一些新的语法来方便…

[Stable Diffusion教程] 第一课 原理解析+配置需求+应用安装+基本步骤

第一课 原理解析配置需求应用安装基本步骤 本次内容记录来源于B站的一个视频 以下是自己安装过程中整理的问题及解决方法&#xff1a; 问题&#xff1a;stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘ 解答&#xff1a;打开webui.bat 把 if not de…

“深入探索JVM内部机制:理解Java虚拟机的工作原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;理解Java虚拟机的工作原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;讲解JVM的工作原理&#xff0c;并通过示例代码帮助读者更好地理解JVM的工作过程。 正文&#xff1a;…

ARM-汇编指令

一&#xff0c;map.lds文件 链接脚本文件 作用&#xff1a;给编译器进行使用&#xff0c;告诉编译器各个段&#xff0c;如何进行分布 /*输出格式&#xff1a;32位可执行程序&#xff0c;小端对齐*/ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm",…

StreamingWarehouse的一些思考和未来趋势

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 一篇笔记。 以Hudi、Iceberg、Paimon这几个框架为例&#xff0c;它们支持高效的数据流/批读写、数据回溯以及数据更新。具备一些传统的实时和离线数仓不具备的特性&#xff0c;主要有几个方面&#xff1a; 这…

Day 59

Day 59 503.下一个更大元素II 将两个nums数组拼接在一起&#xff0c;使用单调栈计算出每一个元素的下一个最大值&#xff0c;最后再把结果集即result数组resize到原数组大小就可以了。 class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:resu…

自然语言处理从入门到应用——LangChain:索引(Indexes)-[检索器(Retrievers)]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 检索器&#xff08;Retrievers&#xff09;是一个通用的接口&#xff0c;方便地将文档与语言模型结合在一起。该接口公开了一个get_relevant_documents方法&#xff0c;接受一个查询&#xff08;字符串&#xff09;并返…

(3)、SpringCache源码分析

1、入口说明 @EnableCaching是开启SpringCache的一个总开关,开启时候我们的缓存相关注解才会生效,所以我们@EnableCaching开始作为入口进行分析, 2、分析@EnableCaching注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(

Python“牵手”唯品会商品列表数据,关键词搜索唯品会API接口数据,唯品会API接口申请指南

唯品会平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;唯品会API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问唯品会平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现唯…