Timeless
花开成景,花落成诗
这段时间在改造Api项目,用MongoDB存储数据,记录一些问题和笔记。
db.goods.find();
这是最简单的分页方法,但在数据量特别大时性能较差
db.users.find().skip((pageNum-1)*pageSize).limit(pageSize)
对于大数据量,可以用上一页的最后一条记录的id来辅助查询
// 第1页
db.users.find().limit(pageSize)
// 获取第1页最后一条记录的_id
// 第2页
db.users.find({'_id': {'$gt': ObjectId(last_id)}}).limit(pageSize)
当需要同时满足多个条件时,可以使用$and运算符。
db.users.find({
$and: [
{ age: { $gt: 18, $lte: 30 } }, // 年龄大于18,小于等于30
{ gender: "female" }, // 姓名等于女性
{ name: { $regex: /^M/ } }, // 姓名以M开头
{ role: { $in: ["admin", "editor"] } } // 角色属于admin或editor
]
});
在实际应用中,可能需要根据多个字段和条件进行复杂的查询。
// 这个查询将返回所有state1等于11且state2等于22的文档,或者value大于300的文档
db.getCollection('users').find({
$or: [
{ $and: [ {"state1": 11}, {"state2": 22} ] },
{ "value": { $gt: 300 } }
]
})
db.集合名称.aggregate([
{
$group: {
_id: "$fieldName", // 按照字段分组
count: { $sum: 1 } // 统计每个分组的文档数量
}
},
{
$match: {
count: { $gt: 1 } // 筛选出数量大于1的分组,即存在重复记录的字段值
}
},
{
$sort: {
count: -1 // 按照重复数量降序排序(可选)
}
}
]);
db.集合名称.update(
{},
{$rename: {"旧字段名": "新字段名"}},
false,
true
) Power by Node.js + Nuxt.js,由 腾讯云提供服务, 已经稳稳地存活了 8年95天
Copyright © 2018 - 2026 Timeless. All rights reserved.桂ICP备18003656号-1桂公网安备45092102000147号
评论