ITPub博客

首页 > 数据库 > 国内数据库 > 胖头鱼的技术专栏-452 这款国产数据库也能替掉MongoDB(20260727)

胖头鱼的技术专栏-452 这款国产数据库也能替掉MongoDB(20260727)

原创 国内数据库 作者:yhw1809 时间:2026-07-27 09:31:03 0 删除 编辑

胖头鱼的技术专栏-452 这款国产数据库也能替掉MongoDB(20260727)

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

914fcc7ad57defa7868c3be1ca7fb4f5.jpg

这个月才测完了金仓数据库的MySQL兼容模式,这几天麦麦又告诉我他们的KingbaseES V9(文档版)也开始内测了,并直接发来了内测软件包和相关材料。作为OPC(无业游民)的我,自然继续担起了摸索语法兼容性的重任。

本次测试环境和之前一样2C8G,100GB磁盘的RHEL 8.10虚拟机上,数据库的配置与安装过程省略。

1 版本介绍

KingbaseES作为一款支持多模的数据库产品,在传统关系型数据库的同时,也支持NoSQL数据库,而MongoDB作为NoSQL数据库的代表,KingbaseES同样对其进行了兼容。

1.1 产品定位

KingbaseES V9(文档版)实现了 协议级兼容MongoDB,可以直接使用MongoDB的客户端(mongosh、MongoDB Compass)或其他语言驱动程序进行连接,无需修改应用代码即可完成从MongoDB到KingbaseES的迁移。

项目 说明
产品名称 金仓数据库管理系统 V9(文档版)
版本号 V009R200C013B001PS002
兼容目标 MongoDB 5.0+
兼容层级 协议级兼容(BSON 协议)
数据库模式 PG 模式(安装时选择)
字符集 UTF8

1.2 核心架构

KingbaseES文档版通过 documentdb 插件提供MongoDB兼容能力。该插件在KingbaseES关系型存储引擎之上实现了BSON文档存储、MongoDB查询协议和全套MongoDB命令接口。
3ea506849cdb406789a9d3e047dcb4ff.png

1.3 功能概览

功能类别 支持情况 说明
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 平台 ✅ 全支持 图形化管理、监控、备份、生命周期管理

1.4 关键配置参数

参数 类型 默认值 说明
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)

1.5 安装要求

KingbaseES V9(文档版)安装方法与KingbaseES标准版相同,安装时需注意:

  1. 数据库管理员用户名保持默认 (system)
  2. 字符集选择 UTF8
  3. 数据库 Locale 选择  zh_CN.UTF-8 或  en_US.UTF-8

1.6 数据库连接方式

使用MongoDB Compass进行测试,连接配置如下:
image.png

2 MongoDB操作兼容测试

2.1 基础数据类型

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()

image.png
测试结果: ✅ 完全兼容

2.2 集合创建与文档插入

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()

image.png
image.png
测试结果: ✅ 完全兼容

2.3 批量插入文档

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()

image.png
测试结果: ✅ 完全兼容

2.4 查询指定相等条件

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']} 的文档

image.png
测试结果: ✅ 完全兼容

2.5 查询操作符 ($in)

MongoDB 语法:  db.coll.find({field: {$in: [...]}})

db.inventory.find({status: {$in: ["A", "D"]}})
// 返回 status 为 A 或 D 的所有文档

image.png
测试结果: ✅ 完全兼容

2.6 AND 条件查询

MongoDB 语法: 逗号分隔条件 (隐式 AND) /  $and 操作符 (显式 AND)

// 隐式 AND
db.inventory.find({status: "D", qty: {$lt: 30}})
// 显式 AND
db.inventory.find({$and: [{status: "D"}, {qty: {$lt: 30}}]})

image.png
测试结果: ✅ 完全兼容

2.7 OR 条件查询

MongoDB 语法:  db.coll.find({$or: [{...}, {...}]})

db.inventory.find({$or: [{status: "A"}, {status: "D"}]})
// 返回 status 为 A 或 D 的所有文档

image.png
测试结果: ✅ 完全兼容

2.8 AND 与 OR 组合查询

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/}]}]})

image.png
测试结果: ✅ 完全兼容

2.9 更新单个文档

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 被设为当前时间

image.png
测试结果: ✅ 完全兼容

2.10 更新多个文档

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 的文档均被更新

image.png
测试结果: ✅ 完全兼容

2.11 替换文档

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 外)

image.png
测试结果: ✅ 完全兼容

2.12 删除所有文档

MongoDB 语法:  db.coll.deleteMany({})

db.inventory.deleteMany({})
// 集合中所有文档被删除

image.png
测试结果: ✅ 完全兼容

2.13 删除符合条件的所有文档

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" 的文档已删除

image.png
测试结果: ✅ 完全兼容

2.14 仅删除一个符合条件的文档

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" 的文档

image.png
测试结果: ✅ 完全兼容

3 查询操作符兼容测试

3.1 比较查询操作符

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

image.png
测试结果: ✅ 完全兼容

操作符 说明 兼容性
$eq 等于 ✅
$gt 大于 ✅
$gte 大于等于 ✅
$lt 小于 ✅
$lte 小于等于 ✅
$in 在指定数组内 ✅
$ne 不等于 ✅
$nin 不在指定数组内 ✅

3.2 逻辑查询操作符

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

image.png
测试结果: ✅ 完全兼容

操作符 说明 兼容性
$and 逻辑与 ✅
$or 逻辑或 ✅
$not 逻辑非 ✅
$nor 逻辑或非 ✅

3.3 数组查询操作符

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

image.png
测试结果: ✅ 完全兼容

操作符 说明 兼容性
$all 包含数组中所有元素 ✅
$elemMatch 数组元素匹配 ✅
$size 数组长度匹配 ✅

3.4 元素查询操作符

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

image.png
测试结果: ✅ 完全兼容

3.5 正则表达式查询 ($regex)

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 (大小写不敏感)

image.png
测试结果: ✅ 完全兼容

3.6 投影操作符 ($slice)

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 条评论

image.png
测试结果: ✅ 完全兼容

4 更新操作符兼容测试

4.1 字段更新操作符

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 设为当前时间

image.png
测试结果: ✅ 完全兼容

操作符 说明 兼容性
$set 设置字段值 ✅
$unset 删除字段 ✅
$inc 自增 ✅
$mul 自乘 ✅
$rename 重命名字段 ✅
$min 取较小值 ✅
$max 取较大值 ✅
$currentDate 设为当前时间 ✅
$setOnInsert 仅插入时设值 ✅

4.2 数组更新操作符

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)

image.png
测试结果: ✅ 完全兼容

操作符 说明 兼容性
$push 向数组添加元素 ✅
$addToSet 向数组添加不重复元素 ✅
$pop 移除数组首/尾元素 ✅
$pull 移除数组中匹配元素 ✅
$pullAll 移除数组中所有匹配元素 ✅
$each 配合  push/ p u s h /addToSet 添加多个元素 ✅
$position 指定插入位置 ✅
$slice 限制数组长度 ✅
$sort 数组排序 ✅

五、聚合操作兼容测试

5.1 聚合管道 ($match + $group)

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 尺寸的总数量

image.png
测试结果: ✅ 完全兼容

5.2 聚合管道阶段 ($addFields)

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 字段

image.png
测试结果: ✅ 完全兼容

5.3 聚合管道操作符 ($abs + $subtract)

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

image.png
测试结果: ✅ 完全兼容

5.4 聚合管道阶段兼容一览

阶段 说明 兼容性
$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 数组展开 ✅

5.5 其他聚合操作符兼容一览

操作符类别 代表操作符 兼容性
算术运算 $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 ✅

六、索引兼容测试

6.1 单字段索引

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()

image.png
测试结果: ✅ 完全兼容

6.2 复合索引

db.students.createIndex({name: 1, gpa: -1})
db.students.getIndexes()

image.png
测试结果: ✅ 完全兼容

6.3 唯一索引

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

image.png
测试结果: ✅ 完全兼容

6.4 全文索引

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: "文档版"}})  // 中文搜索

image.png
测试结果: ✅ 完全兼容 (支持中英文)

6.5 查看与删除索引

db.students.getIndexes()  // 查看所有索引
db.students.dropIndex("name_1")  // 删除指定索引
db.students.dropIndexes()  // 删除所有索引 (除 _id 外)

测试结果: ✅ 完全兼容

7 语法兼容性总结

测试类别 完全兼容 部分兼容 不兼容 兼容率
文档操作 (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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-06-07

  • 博文量
    383
  • 访问量
    402201