Array(数组)
最后更新:2026-10-09
Array(数组)
Array存储有序列表,元素可以是任意BSON类型(含嵌套数组与文档)。字段匹配是「包含任一元素」语义:`{ tags: 'mongodb' }`匹配tags中含该值的文档。`$elemMatch`让多个条件作用于同一元素。数组字段建索引自动变为多键索引(multikey),展开每个元素。
| 分类 | BSON 类型 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ tags: ["mongodb", "nosql"] }
db.posts.find({ tags: "mongodb" })
db.posts.find({ ratings: { $elemMatch: { score: { $gte: 4 }, user: "alice" } } })
返回值:数组值本身;查询时返回匹配文档
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// Array:包含匹配与$elemMatch
use shop
db.posts.insertOne({ tags: ['mongodb', 'tutorial'], ratings: [{ score: 5, user: 'alice' }] })
db.posts.find({ tags: 'mongodb' })
运行结果:
{ _id: ObjectId('...'), tags: ['mongodb', 'tutorial'], ratings: [{ score: 5, user: 'alice' }] }
📌 注意事项
- 字段匹配数组是包含任一元素语义
- $elemMatch保证多条件作用于同一元素
- 数组建索引自动为多键索引
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q数组查询是精确匹配还是包含?
A包含语义。{ tags: 'a' }匹配tags含'a'的文档,不要求整数组相等。
Q多条件命中同一元素怎么写?
A用$elemMatch: { score: ..., user: ... },保证条件落在同一元素。
Q数组能建索引吗?
A可以,自动建多键索引,索引里展开数组的每个元素。