基本查询操作
使用 find() 方法查询文档,可以传入查询条件参数:
javascript
db.collection.find({ field: value })
查询所有文档:
javascript
db.collection.find()
条件查询
等于条件:
javascript
db.collection.find({ age: 25 })
不等于条件:
javascript
db.collection.find({ age: { $ne: 25 } })
大于条件:
javascript
db.collection.find({ age: { $gt: 25 } })
小于条件:
javascript
db.collection.find({ age: { $lt: 25 } })
范围条件:
javascript
db.collection.find({ age: { $gte: 20, $lte: 30 } })
逻辑查询
AND 条件:
javascript
db.collection.find({ age: 25, name: "John" })
OR 条件:
javascript
db.collection.find({ $or: [{ age: 25 }, { name: "John" }] })
NOT 条件:
javascript
db.collection.find({ age: { $not: { $gt: 25 } } })
数组查询
包含元素:
javascript
db.collection.find({ tags: "mongodb" })
精确匹配数组:
javascript
db.collection.find({ tags: ["mongodb", "database"] })
数组大小:
javascript
db.collection.find({ tags: { $size: 2 } })
投影查询
指定返回字段:
javascript
db.collection.find({}, { name: 1, age: 1 })
排除字段:
javascript
db.collection.find({}, { password: 0 })
排序和分页
排序:
javascript
db.collection.find().sort({ age: 1 }) // 1升序,-1降序
分页:
javascript
db.collection.find().skip(10).limit(5)
聚合查询
计数:
javascript
db.collection.countDocuments({ age: 25 })
分组:
javascript
db.collection.aggregate([
{ $group: { _id: "$department", total: { $sum: "$salary" } } }
])
更新操作
更新单个文档:
javascript
db.collection.updateOne({ name: "John" }, { $set: { age: 26 } })
更新多个文档:
javascript
db.collection.updateMany({ department: "IT" }, { $set: { bonus: 1000 } })
删除操作
删除单个文档:
javascript
db.collection.deleteOne({ name: "John" })
删除多个文档:
javascript
db.collection.deleteMany({ department: "HR" })
索引操作
创建索引:
以下是针对 MongoDB 聚合查询和日期操作的整理说明:
日期字符串转换与分组统计
将字符串格式的日期转换为日期对象并按天分组统计:
javascript
db.collection.aggregate([
{
$project: {
end_date: {
$dateFromString: {
dateString: "$结束时间",
format: "%Y-%m-%d %H:%M:%S"
}
}
}
},
{
$group: {
_id: { $dateToString: { format: "%Y-%m-%d", date: "$end_date" } },
count: { $sum: 1 }
}
},
{ $sort: { _id: 1 } }
])
日期范围查询(聚合管道)
使用 $addFields 转换日期后进行范围过滤:
javascript
db.collection.aggregate([
{
$addFields: {
end_date: {
$dateFromString: {
dateString: "$结束时间",
format: "%Y-%m-%d %H:%M:%S"
}
}
}
},
{
$match: {
end_date: {
$gte: ISODate("2025-08-16T00:00:00Z"),
$lt: ISODate("2025-08-17T00:00:00Z")
}
}
}
])
正则表达式匹配日期前缀
查找以特定日期开头的字符串字段:
javascript
db.collection.find({
结束时间: { $regex: "^2025-10-27" }
})
基于字符串的范围删除
删除字符串格式日期在指定范围内的文档:
javascript
db.collection.deleteMany({
结束时间: {
$gte: "2025-10-27 00:00:00",
$lte: "2025-10-27 23:59:59"
}
})
原生日期类型查询
直接查询 ISODate 类型的字段:
javascript
db.collection.find({
结束时间: {
$gte: ISODate("2025-08-16T00:00:00Z"),
$lt: ISODate("2025-08-17T00:00:00Z")
}
})
JSON 字段内容查询
在 JSON 字符串中搜索特定键值对:
javascript
db.collection.find({
json: {
$regex: /"account_number"\s*:\s*"25472145652320200722"/
}
})
字段采样检查
查看前5个文档的指定字段:
javascript
db.collection.find({}, { "结束时间": 1 }).limit(5)
注意:
- 使用
$dateFromString时需确保字符串格式与format参数完全匹配 - 字符串比较和日期类型比较的查询性能差异显著,建议存储时使用原生日期类型
- 正则表达式查询对性能影响较大,适合小规模数据或后台任务
查看索引:
javascript
db.collection.getIndexes()
删除索引:
javascript
db.collection.dropIndex("name_1")