mongodb 高级查询

45 阅读1分钟

1.与查询 and

db.user.find({age:0,black:false})

2.或查询 or

db.user.find({$or:[{age:0},{age:12}]})

3.比较运算符

$eq等于
$ne不等于
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$in包含
$nin不包含
db.user.find({age:{"$gt":10})

4.模糊查询

db.user.find({name: { $regex: "张三", $options: "i" }})

$regex 使用的正则查询,i 忽略大小写

5.排序,分页

db.user.find().sort({ createTime: -1 }).skip(20).limit(10)

正序是 1,倒序是-1

6.去重

db,user.distinct("city")

7.聚合(aggregate)

7.1运算符

$sum求和
$avg求平均值
$min求最小值
$max求最大值
$first组中第一个文档字段值
$last组中最后一个文档字段值
$push把字段值放入数组
$addToSet把字段值放入数组并去重

7.2分组查询

$match 过滤
{ $match: { age:{$gt:10} } }
$group 分组统计
{

    $group: {

    _id: "$age",

    total: { $sum: 1}

    }

}
$project 字段转换
{

    $project: {

    userId: "$_id",

    _id: 0 //不读取

    }

}
$lookup 关联查询
{

    $lookup: {

        from: "user",

        localField: "userId",

        foreignField: "id", //user中的字段名

        as: "user"

    }

}
$unwind 拆分数组数据
{ $unwind: "$user" }

可以把数组数据 拆分成多条数据

$addFields 增加字段
{

    $addFields: {userName: "$name"}

}
$facet

在同一个聚合管道里执行多个子管道,返回多个结果集。

{
    $facet: {
        items: [
            { $skip: 0 },{ $limit: 10 }
        ],
        total: [
            {
                $count: "count"
            }
        ]
    }
}

查询返回结果都是数组。