作者:胖头鱼的鱼缸(尹海文) Oracle ACE Pro: Database PostgreSQL ACE 10 年 + 数据库行业经验 拥有 OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP 等认证 墨天轮 MVP,ITPUB 认证专家 圈内拥有“总监”称号,非著 名社恐(社交恐怖分子) 全网同名:胖头鱼的鱼缸 ITPUB:yhw1809 除授权转载并标明出处外,均为“非法”抄袭

这个月才测完了金仓数据库的MySQL兼容模式,这几天麦麦又告诉我他们的KingbaseES V9(文档版)也开始内测了,并直接发来了内测软件包和相关材料。作为OPC(无业游民)的我,自然继续担起了摸索语法兼容性的重任。
本次测试环境和之前一样2C8G,100GB磁盘的RHEL 8.10虚拟机上,数据库的配置与安装过程省略。
KingbaseES作为一款支持多模的数据库产品,在传统关系型数据库的同时,也支持NoSQL数据库,而MongoDB作为NoSQL数据库的代表,KingbaseES同样对其进行了兼容。
KingbaseES V9(文档版)实现了 协议级兼容MongoDB,可以直接使用MongoDB的客户端(mongosh、MongoDB Compass)或其他语言驱动程序进行连接,无需修改应用代码即可完成从MongoDB到KingbaseES的迁移。
| 项目 | 说明 |
|---|---|
| 产品名称 | 金仓数据库管理系统 V9(文档版) |
| 版本号 | V009R200C013B001PS002 |
| 兼容目标 | MongoDB 5.0+ |
| 兼容层级 | 协议级兼容(BSON 协议) |
| 数据库模式 | PG 模式(安装时选择) |
| 字符集 | UTF8 |
KingbaseES文档版通过
documentdb 插件提供MongoDB兼容能力。该插件在KingbaseES关系型存储引擎之上实现了BSON文档存储、MongoDB查询协议和全套MongoDB命令接口。

| 功能类别 | 支持情况 | 说明 |
|---|---|---|
| BSON 数据类型 | ✅ 全支持 | 字符串、数值、布尔、日期、ObjectId、内嵌文档、数组、二进制、正则等 |
| CRUD 操作 | ✅ 全支持 | insertOne/insertMany/find/updateOne/updateMany/replaceOne/deleteOne/deleteMany |
| 查询操作符 | ✅ 全支持 | 比较、逻辑、数组、元素、评估、地理空间操作符 |
| 更新操作符 | ✅ 全支持 | 字段更新、数组更新操作符 |
| 聚合管道 | ✅ 全支持 | 29 个管道阶段 + 100+ 聚合操作符 |
| 索引 | ✅ 全支持 | 单字段、复合、唯一、全文 (中英文)、地理空间索引 |
| 多文档事务 | ✅ 全支持 | C013 版本新增,支持 snapshot 隔离级别 |
| GridFS | ✅ 全支持 | 大文件存储 (支持 10GB+ 超大文件) |
| 安全 | ✅ 全支持 | SCRAM-SHA-256 认证、SM4/RC4 透明存储加密 |
| 备份恢复 | ✅ 全支持 | sys_dump/sys_restore + mongodump/mongorestore |
| 数据迁移 | ✅ 全支持 | mongodump/mongorestore/mongoexport/mongoimport |
| 高可用集群 | ✅ 全支持 | 一主一备、自动故障切换、副本集连接 |
| 运维监控 | ✅ 全支持 | 管理命令、诊断命令、慢 SQL (sys_log + KWR) |
| KEMCC 平台 | ✅ 全支持 | 图形化管理、监控、备份、生命周期管理 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
documentdb.enableUserCrud |
bool | false | 是否允许通过 mongosh 创建和删除用户 (需设为 true) |
documentdb.enableSchemaValidation |
bool | false | 是否允许对 JSON 数据进行模式校验 |
documentdb_core.enableCollation |
bool | false | 是否启用 collation (排序规则),设为 true 时按指定 collation 比较和排序 |
cron.database_name |
string | - | 定时任务所在数据库 |
log_min_duration_statement |
int | -1 | 慢 SQL 阈值 (ms),设为 >=0 启用 |
archive_mode |
enum | off | 归档模式 (KEMCC 备份需设为 on) |
KingbaseES V9(文档版)安装方法与KingbaseES标准版相同,安装时需注意:
zh_CN.UTF-8 或
en_US.UTF-8使用MongoDB Compass进行测试,连接配置如下:

MongoDB 行为: 支持 BSON 全量数据类型 (字符串、数值、布尔、日期、ObjectId、内嵌文档、数组等)
db.dataType.drop()
db.dataType.insertOne({_id: 1, val: "abc"}) // 字符串
db.dataType.insertOne({_id: 2, val: NumberInt(100)}) // int32
db.dataType.insertOne({_id: 3, val: NumberLong("123456789012345")}) // int64
db.dataType.insertOne({_id: 4, val: true}) // 布尔
db.dataType.insertOne({_id: 5, val: 19.99}) // 双精度浮点
db.dataType.insertOne({_id: 6, val: new Date("2025-01-01T00:00:00Z")}) // 日期
db.dataType.insertOne({_id: 7, val: Timestamp(1735689600, 1)}) // 时间戳
db.dataType.insertOne({_id: 8, val: ObjectId("65857a7f1234567890abcdef")}) // ObjectId
db.dataType.insertOne({_id: 9, val: {name: "张三", age: 20}}) // 内嵌文档
db.dataType.insertOne({_id: 10, val: null}) // 空值
db.dataType.insertOne({_id: 11, val: BinData(0, "SGVsbG8gTW9uZ29EQg==")}) // 二进制
db.dataType.insertOne({_id: 12, val: /mongodb/i}) // 正则表达式
db.dataType.insertOne({_id: 13, val: ["reading", "running"]}) // 数组
db.dataType.find()
测试结果: ✅ 完全兼容
MongoDB 语法:
db.createCollection() 显式创建 /
db.coll.insertOne() 隐式创建
// 隐式创建
db.inventory.drop()
db.inventory.insertOne({status: 'D', qty: 20, item: ['paper']})
db.inventory.insertOne({status: 'A', qty: 50, item: ['ruler']})
db.inventory.find()
// 显式创建
db.inventory.drop()
db.createCollection('inventory')
db.inventory.insertOne({status: 'D', qty: 20, item: ['paper']})
db.inventory.find()
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.insertMany([...])
db.scientists.drop()
db.scientists.insertMany([
{name: {firstname: 'Alan', lastname: 'Turing'}, born: 1912, invention: 'Turing Machine'},
{name: {firstname: 'Graham', lastname: 'Bell'}, born: 1847, invention: 'Telephone'}
])
db.scientists.find()
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.find({field: value})
db.inventory.drop()
db.inventory.insertOne({status: 'D', qty: 20, item: ['paper']})
db.inventory.insertOne({status: 'A', qty: 50, item: ['ruler']})
db.inventory.find({status: "D"})
// 返回 {status: 'D', qty: 20, item: ['paper']} 的文档
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.find({field: {$in: [...]}})
db.inventory.find({status: {$in: ["A", "D"]}})
// 返回 status 为 A 或 D 的所有文档
测试结果: ✅ 完全兼容
MongoDB 语法: 逗号分隔条件 (隐式 AND) /
$and 操作符 (显式 AND)
// 隐式 AND
db.inventory.find({status: "D", qty: {$lt: 30}})
// 显式 AND
db.inventory.find({$and: [{status: "D"}, {qty: {$lt: 30}}]})
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.find({$or: [{...}, {...}]})
db.inventory.find({$or: [{status: "A"}, {status: "D"}]})
// 返回 status 为 A 或 D 的所有文档
测试结果: ✅ 完全兼容
MongoDB 行为: 支持在同一查询中组合 AND 和 OR 条件
db.inventory.find({status: "D", $or: [{qty: {$lt: 30}}, {item: /^p/}]})
db.inventory.find({$and: [{status: "D"}, {$or: [{qty: {$lt: 30}}, {item: /^p/}]}]})
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.updateOne(filter, update)
db.inventory.drop()
db.inventory.insertOne({status: 'D', qty: 20, item: ['paper']})
db.inventory.find()
db.inventory.updateOne(
{item: "paper"},
{$set: {"size.uom": "cm", status: "P"}, $currentDate: {lastModified: true}}
)
db.inventory.find()
// 文档成功更新,size.uom 和 status 被修改,lastModified 被设为当前时间
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.updateMany(filter, update)
db.inventory.drop()
db.inventory.insertOne({status: 'D', qty: 20, item: ['paper']})
db.inventory.insertOne({status: 'A', qty: 50, item: ['ruler']})
db.inventory.find()
db.inventory.updateMany(
{qty: {$lt: 60}},
{$set: {"size.uom": "in", status: "Y"}}
)
db.inventory.find()
// 所有 qty < 60 的文档均被更新
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.replaceOne(filter, replacement)
db.inventory.replaceOne(
{item: "paper"},
{item: "paper", instock: [{warehouse: "A", qty: 60}, {warehouse: "B", qty: 40}]}
)
db.inventory.find()
// 匹配文档被完整替换 (除 _id 外)
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.deleteMany({})
db.inventory.deleteMany({})
// 集合中所有文档被删除
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.deleteMany({field: value})
db.inventory.insertOne({status: 'A', qty: 20, item: ['paper']})
db.inventory.insertOne({status: 'A', qty: 50, item: ['ruler']})
db.inventory.insertOne({status: 'D', qty: 70, item: ['ruler']})
db.inventory.find()
db.inventory.deleteMany({status: "A"})
db.inventory.find({status: "A"})
// 返回空,所有 status="A" 的文档已删除
测试结果: ✅ 完全兼容
MongoDB 语法:
db.coll.deleteOne({field: value})
db.inventory.insertOne({status: 'A', qty: 20, item: ['paper']})
db.inventory.insertOne({status: 'A', qty: 50, item: ['ruler']})
db.inventory.find()
db.inventory.deleteOne({status: "A"})
db.inventory.find({status: "A"})
// 仅删除第一个匹配文档,剩余一个 status="A" 的文档
测试结果: ✅ 完全兼容
db.scores.drop()
db.scores.insertMany([
{_id: 1, score: 85}, {_id: 2, score: 90}, {_id: 3, score: 60}, {_id: 4, score: 75}
])
db.scores.find({score: {$gte: 80}}) // 返回 _id: 1, 2
db.scores.find({score: {$lt: 70}}) // 返回 _id: 3
db.scores.find({score: {$in: [60, 90]}}) // 返回 _id: 2, 3
db.scores.find({score: {$nin: [60, 90]}}) // 返回 _id: 1, 4
测试结果: ✅ 完全兼容
| 操作符 | 说明 | 兼容性 |
|---|---|---|
$eq |
等于 | ✅ |
$gt |
大于 | ✅ |
$gte |
大于等于 | ✅ |
$lt |
小于 | ✅ |
$lte |
小于等于 | ✅ |
$in |
在指定数组内 | ✅ |
$ne |
不等于 | ✅ |
$nin |
不在指定数组内 | ✅ |
db.scores.find({$and: [{score: {$gte: 70}}, {score: {$lt: 90}}]}) // 返回 _id: 1, 4
db.scores.find({$or: [{score: {$lt: 65}}, {score: {$gt: 85}}]}) // 返回 _id: 2, 3
db.scores.find({score: {$not: {$gt: 80}}}) // 返回 _id: 3, 4
db.scores.find({$nor: [{score: 85}, {score: 90}]}) // 返回 _id: 3, 4
测试结果: ✅ 完全兼容
| 操作符 | 说明 | 兼容性 |
|---|---|---|
$and |
逻辑与 | ✅ |
$or |
逻辑或 | ✅ |
$not |
逻辑非 | ✅ |
$nor |
逻辑或非 | ✅ |
db.articles.drop()
db.articles.insertMany([
{tags: ["ssl", "security"]},
{tags: ["ssl2", "security2"]},
{tags: ["ssl", "security", "crypto"]}
])
db.articles.find({tags: {$all: ["ssl", "security"]}}) // 返回第 1、3 条
db.articles.find({tags: {$size: 2}}) // 返回第 1、2 条
db.scores2.drop()
db.scores2.insertMany([
{_id: 1, results: [82, 85, 88]},
{_id: 2, results: [75, 88, 89]}
])
db.scores2.find({results: {$elemMatch: {$gte: 80, $lt: 85}}}) // 返回 _id: 1
测试结果: ✅ 完全兼容
| 操作符 | 说明 | 兼容性 |
|---|---|---|
$all |
包含数组中所有元素 | ✅ |
$elemMatch |
数组元素匹配 | ✅ |
$size |
数组长度匹配 | ✅ |
db.records.drop()
db.records.insertMany([
{_id: 1, a: 1},
{_id: 2, a: null},
{_id: 3, b: 1}
])
db.records.find({a: {$exists: true}}) // 返回 _id: 1, 2
db.records.find({a: {$exists: false}}) // 返回 _id: 3
db.records.find({a: {$type: "int"}}) // 返回 _id: 1
测试结果: ✅ 完全兼容
db.products.drop()
db.products.insertMany([
{_id: 1, sku: "abc123"},
{_id: 2, sku: "abc456"},
{_id: 3, sku: "def789"}
])
db.products.find({sku: /^abc/}) // 返回 _id: 1, 2
db.products.find({sku: {$regex: "789$"}}) // 返回 _id: 3
db.products.find({sku: {$regex: /ABC/i}}) // 返回 _id: 1, 2 (大小写不敏感)
测试结果: ✅ 完全兼容
db.posts.drop()
db.posts.insertMany([
{_id: 1, title: "Bagels are not croissants.", comments: [{comment: "0. true"}, {comment: "1. croissants"}]},
{_id: 2, title: "Coffee please.", comments: [{comment: "0. fooey"}, {comment: "1. tea"}, {comment: "2. iced coffee"}, {comment: "3. cappuccino"}, {comment: "4. whatever"}]}
])
db.posts.find({}, {comments: {$slice: 3}}) // 每条文档最多返回前 3 条评论
测试结果: ✅ 完全兼容
db.products.drop()
db.products.insertOne({_id: 1, sku: "abc123", quantity: 10, metrics: {orders: 2, ratings: 3.5}})
// $inc 自增
db.products.updateOne({sku: "abc123"}, {$inc: {quantity: -2, "metrics.orders": 1}})
db.products.find()
// quantity: 8, metrics.orders: 3
// $set 设置新字段
db.products.updateOne({sku: "abc123"}, {$set: {"metrics.ratings": 4.0}})
db.products.find()
// metrics.ratings: 4.0
// $mul 自乘
db.products.updateOne({sku: "abc123"}, {$mul: {quantity: 2}})
db.products.find()
// quantity: 16
// $unset 删除字段
db.products.updateOne({sku: "abc123"}, {$unset: {"metrics.ratings": ""}})
db.products.find()
// metrics.ratings 被删除
// $rename 重命名
db.products.updateOne({sku: "abc123"}, {$rename: {quantity: "qty"}})
db.products.find()
// quantity -> qty
// $min / $max
db.products.updateOne({sku: "abc123"}, {$min: {qty: 10}}) // qty: 10 (10 < 16)
db.products.updateOne({sku: "abc123"}, {$max: {qty: 20}}) // qty: 20 (20 > 10)
db.products.find()
// $currentDate
db.products.updateOne({sku: "abc123"}, {$currentDate: {lastModified: true}})
db.products.find()
// lastModified 设为当前时间
测试结果: ✅ 完全兼容
| 操作符 | 说明 | 兼容性 |
|---|---|---|
$set |
设置字段值 | ✅ |
$unset |
删除字段 | ✅ |
$inc |
自增 | ✅ |
$mul |
自乘 | ✅ |
$rename |
重命名字段 | ✅ |
$min |
取较小值 | ✅ |
$max |
取较大值 | ✅ |
$currentDate |
设为当前时间 | ✅ |
$setOnInsert |
仅插入时设值 | ✅ |
db.students.drop()
db.students.insertOne({_id: 1, name: "Alice", grades: [85, 90]})
// $push 添加单个元素
db.students.updateOne({_id: 1}, {$push: {grades: 95}})
db.students.find()
// grades: [85, 90, 95]
// $push + $each 添加多个元素
db.students.updateOne({_id: 1}, {$push: {grades: {$each: [88, 92]}}})
db.students.find()
// grades: [85, 90, 95, 88, 92]
// $addToSet 添加不重复元素
db.students.updateOne({_id: 1}, {$addToSet: {grades: 85}})
db.students.find()
// grades 不变 (85 已存在)
// $pull 移除匹配元素
db.students.updateOne({_id: 1}, {$pull: {grades: {$lt: 88}}})
db.students.find()
// grades: [90, 95, 88, 92]
// $pop 移除末尾元素
db.students.updateOne({_id: 1}, {$pop: {grades: 1}})
db.students.find()
// grades: [90, 95, 88]
// $push + $sort + $slice 排序并限制长度
db.students.updateOne({_id: 1}, {$push: {grades: {$each: [80, 100], $sort: -1, $slice: 3}}})
db.students.find()
// grades: [100, 95, 90] (降序,保留前 3)
测试结果: ✅ 完全兼容
| 操作符 | 说明 | 兼容性 |
|---|---|---|
$push |
向数组添加元素 | ✅ |
$addToSet |
向数组添加不重复元素 | ✅ |
$pop |
移除数组首/尾元素 | ✅ |
$pull |
移除数组中匹配元素 | ✅ |
$pullAll |
移除数组中所有匹配元素 | ✅ |
$each |
配合 p u s h /addToSet 添加多个元素 | ✅ |
$position |
指定插入位置 | ✅ |
$slice |
限制数组长度 | ✅ |
$sort |
数组排序 | ✅ |
MongoDB 语法:
db.coll.aggregate([{$match: ...}, {$group: ...}])
db.orders.drop()
db.orders.insertMany([
{_id: 0, type: "chicken", size: "small", price: 4, quantity: 2},
{_id: 1, type: "chicken", size: "medium", price: 5, quantity: 1},
{_id: 2, type: "chicken", size: "medium", price: 6, quantity: 5},
{_id: 3, type: "beef", size: "medium", price: 7, quantity: 8},
{_id: 4, type: "vegetable", size: "medium", price: 6, quantity: 3},
{_id: 5, type: "vegetable", size: "large", price: 8, quantity: 4}
])
db.orders.aggregate([
{$match: {size: "medium"}},
{$group: {_id: "$type", totalQuantity: {$sum: "$quantity"}}}
])
// 按 type 分组,统计 medium 尺寸的总数量
测试结果: ✅ 完全兼容
db.scores.drop()
db.scores.insertMany([
{_id: 1, student: "Maya", homework: [10, 5, 10], quiz: [10, 8], extraCredit: 0},
{_id: 2, student: "Ryan", homework: [5, 6, 5], quiz: [8, 8], extraCredit: 8}
])
db.scores.aggregate([
{$addFields: {
totalHomework: {$sum: "$homework"},
totalQuiz: {$sum: "$quiz"}
}},
{$addFields: {
totalScore: {$add: ["$totalHomework", "$totalQuiz", "$extraCredit"]}
}}
])
// 每条文档新增 totalHomework, totalQuiz, totalScore 字段
测试结果: ✅ 完全兼容
db.temperatureChange.drop()
db.temperatureChange.insertMany([
{_id: 1, startTemp: 50, endTemp: 80},
{_id: 2, startTemp: 40, endTemp: 40},
{_id: 3, startTemp: 90, endTemp: 70},
{_id: 4, startTemp: 60, endTemp: 70}
])
db.temperatureChange.aggregate([
{$project: {delta: {$abs: {$subtract: ["$startTemp", "$endTemp"]}}}}
])
// 计算温度变化的绝对值: 30, 0, 20, 10
测试结果: ✅ 完全兼容
| 阶段 | 说明 | 兼容性 |
|---|---|---|
$addFields |
添加新字段 | ✅ |
$bucket |
分桶分类 | ✅ |
$bucketAuto |
自动分桶 | ✅ |
$collStats |
集合统计 | ✅ |
$count |
计数 | ✅ |
$densify |
密集化文档 | ✅ |
$documents |
内联文档 | ✅ |
$facet |
多管道分支 | ✅ |
$fill |
填充空值 | ✅ |
$geoNear |
地理空间近邻 | ✅ |
$graphLookup |
图遍历查询 | ✅ |
$group |
分组聚合 | ✅ |
$indexStats |
索引统计 | ✅ |
$limit |
限制结果数 | ✅ |
$lookup |
关联查询 | ✅ |
$match |
过滤 | ✅ |
$merge |
合并输出 | ✅ |
$out |
输出到集合 | ✅ |
$project |
字段投影 | ✅ |
$replaceRoot |
替换根文档 | ✅ |
$replaceWith |
替换文档 | ✅ |
$sample |
随机采样 | ✅ |
$set |
设置字段 (同 $addFields) | ✅ |
$skip |
跳过文档 | ✅ |
$sort |
排序 | ✅ |
$sortByCount |
按值计数排序 | ✅ |
$unset |
移除字段 | ✅ |
$unwind |
数组展开 | ✅ |
| 操作符类别 | 代表操作符 | 兼容性 |
|---|---|---|
| 算术运算 |
$add
$subtract
$multiply
$divide
$mod
$abs
$ceil
$floor
$pow
$sqrt |
✅ |
| 字符串操作 |
$concat
$substr
$toLower
$toUpper
$trim
$split
$strcasecmp |
✅ |
| 数组操作 |
$arrayElemAt
$concatArrays
$filter
$map
$reduce
$size
$slice
$sortArray |
✅ |
| 类型转换 |
$toString
$toInt
$toLong
$toDouble
$toDecimal
$toBool
$toDate
$toObjectId |
✅ |
| 日期操作 |
$year
$month
$dayOfMonth
$hour
$minute
$second
$dayOfWeek
$dayOfYear
$week |
✅ |
| 条件判断 |
$cond
$switch
$ifNull |
✅ |
| 集合操作 |
$setUnion
$setIntersection
$setDifference
$setIsSubset
$setEquals |
✅ |
| 统计聚合 |
$sum
$avg
$min
$max
$stdDevPop
$stdDevSamp
$first
$last |
✅ |
| 排序取值 |
$top
$topN
$bottom
$bottomN |
✅ |
| 窗口函数 |
$shift
$denseRank
$rank
$documentNumber |
✅ |
MongoDB 语法:
db.coll.createIndex({field: 1})
db.students.drop()
db.students.insertMany([
{name: "ZhangMing", gpa: 3.6, location: {city: "Beijing"}},
{name: "LiHua", gpa: 3.8, location: {city: "Shanghai"}},
{name: "WangFang", gpa: 3.2, location: {city: "Guangzhou"}}
])
db.students.createIndex({name: 1})
db.students.getIndexes()
测试结果: ✅ 完全兼容
db.students.createIndex({name: 1, gpa: -1})
db.students.getIndexes()
测试结果: ✅ 完全兼容
db.students.dropIndex({name: 1})
db.students.dropIndex({name: 1, gpa: -1})
db.students.createIndex({name: 1}, {unique: true})
// 插入重复 name 会报错
db.students.insertOne({name: "ZhangMing", gpa: 3.9}) // 报错: E11000 duplicate key
测试结果: ✅ 完全兼容
db.articles.drop()
db.articles.insertMany([
{title: "MongoDB 入门指南", content: "本文介绍 MongoDB 基础知识"},
{title: "KingbaseES 文档版", content: "KingbaseES 兼容 MongoDB 协议"},
{title: "Database Tutorial", content: "Learn database fundamentals"}
])
db.articles.createIndex({title: "text", content: "text"})
db.articles.find({$text: {$search: "MongoDB"}}) // 英文搜索
db.articles.find({$text: {$search: "文档版"}}) // 中文搜索
测试结果: ✅ 完全兼容 (支持中英文)
db.students.getIndexes() // 查看所有索引
db.students.dropIndex("name_1") // 删除指定索引
db.students.dropIndexes() // 删除所有索引 (除 _id 外)
测试结果: ✅ 完全兼容
| 测试类别 | 完全兼容 | 部分兼容 | 不兼容 | 兼容率 |
|---|---|---|---|---|
| 文档操作 (CRUD) | 14 | 0 | 0 | 100% |
| 查询操作符 | 6 | 0 | 0 | 100% |
| 更新操作符 | 2 | 0 | 0 | 100% |
| 聚合操作 | 5 | 0 | 0 | 100% |
| 索引 | 5 | 0 | 0 | 100% |
| 合计 | 32 | 0 | 0 | 100% |
KingbaseES V9(文档版)以其与MongoDB高度的语法兼容性,使其成为替换MongoDB的优选方案。
老规矩,知道写了些啥。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3176794/ ,如需转载,请注明出处,否则将追究法律责任。