MongoDB条件查询
在MongoDB中,条件查询是我们经常用到的操作之一。通过条件查询,我们可以根据指定的条件从集合中筛选出符合条件的文档。在本文中,我们将深入探讨MongoDB中的条件查询,介绍常用的查询操作符,并通过示例演示如何进行条件查询。
查询操作符
MongoDB提供了丰富的查询操作符,用于在条件查询中指定条件。常用的查询操作符包括:
$eq
: 等于$ne
: 不等于$gt
: 大于$gte
: 大于等于$lt
: 小于$lte
: 小于等于$in
: 在指定范围内$nin
: 不在指定范围内$or
: 或$and
: 与$not
: 非$regex
: 正则表达式匹配
示例数据
在本文中,我们将使用如下示例数据进行演示:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"_id": 2,
"name": "Bob",
"age": 30,
"gender": "male"
},
{
"_id": 3,
"name": "Charlie",
"age": 22,
"gender": "male"
},
{
"_id": 4,
"name": "David",
"age": 35,
"gender": "male"
},
{
"_id": 5,
"name": "Eve",
"age": 28,
"gender": "female"
}
等于查询($eq)
等于查询用于筛选字段值等于指定值的文档。例如,我们希望查询年龄等于25岁的文档:
db.users.find({ age: { $eq: 25 } })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
}
不等于查询($ne)
不等于查询用于筛选字段值不等于指定值的文档。例如,我们希望查询年龄不等于30岁的文档:
db.users.find({ age: { $ne: 30 } })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"_id": 3,
"name": "Charlie",
"age": 22,
"gender": "male"
},
{
"_id": 5,
"name": "Eve",
"age": 28,
"gender": "female"
}
大于查询($gt)
大于查询用于筛选字段值大于指定值的文档。例如,我们希望查询年龄大于25岁的文档:
db.users.find({ age: { $gt: 25 } })
查询结果为:
{
"_id": 2,
"name": "Bob",
"age": 30,
"gender": "male"
},
{
"_id": 4,
"name": "David",
"age": 35,
"gender": "male"
},
{
"_id": 5,
"name": "Eve",
"age": 28,
"gender": "female"
}
大于等于查询($gte)
大于等于查询用于筛选字段值大于等于指定值的文档。例如,我们希望查询年龄大于等于30岁的文档:
db.users.find({ age: { $gte: 30 } })
查询结果为:
{
"_id": 2,
"name": "Bob",
"age": 30,
"gender": "male"
},
{
"_id": 4,
"name": "David",
"age": 35,
"gender": "male"
}
小于查询($lt)
小于查询用于筛选字段值小于指定值的文档。例如,我们希望查询年龄小于30岁的文档:
db.users.find({ age: { $lt: 30 } })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"_id": 3,
"name": "Charlie",
"age": 22,
"gender": "male"
}
小于等于查询($lte)
小于等于查询用于筛选字段值小于等于指定值的文档。例如,我们希望查询年龄小于等于25岁的文档:
db.users.find({ age: { $lte: 25 } })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"_id": 3,
"name": "Charlie",
"age": 22,
"gender": "male"
}
在指定范围内查询($in)
在指定范围内查询用于筛选字段值在指定范围内的文档。例如,我们希望查询年龄在25岁和30岁之间的文档:
db.users.find({ age: { $in: [25, 30] } })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"_id": 2,
"name": "Bob",
"age": 30,
"gender": "male"
}
不在指定范围内查询($nin)
不在指定范围内查询用于筛选字段值不在指定范围内的文档。例如,我们希望查询年龄不在25岁和30岁之间的文档:
db.users.find({ age: { $nin: [25, 30] } })
查询结果为:
{
"_id": 3,
"name": "Charlie",
"age": 22,
"gender": "male"
},
{
"_id": 4,
"name": "David",
"age": 35,
"gender": "male"
},
{
"_id": 5,
"name": "Eve",
"age": 28,
"gender": "female"
}
或查询($or)
或查询用于筛选满足任一条件的文档。例如,我们希望查询年龄等于25岁或30岁的文档:
db.users.find({ $or: [{ age: 25 }, { age: 30 }] })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"_id": 2,
"name": "Bob",
"age": 30,
"gender": "male"
}
与查询($and)
与查询用于筛选满足所有条件的文档。例如,我们希望查询年龄大于等于25岁且性别为女性的文档:
db.users.find({ and: [{ age: {gte: 25 } }, { gender: "female" }] })
查询结果为:
{
"_id": 1,
"name": "Alice",
"age": 25,
"gender": "female"
}
非查询($not)
非查询用于筛选不满足指定条件的文档。例如,我们希望查询年龄不等于25岁的文档:
db.users.find({ age: { not: {eq: 25 } } })
查询结果为:
{
"_id": 2,
"name": "Bob",
"age": 30,
"gender": "male"
},
{
"_id": 3,
"name": "Charlie",
"age": 22,
"gender": "male"
},
{
"_id": 4,
"name": "David",
"age": 35,
"gender": "male"
},
{
"_id": 5,
"name": "Eve",
"age": 28,
"gender": "female"
}
正则表达式匹配查询($regex)
正则表达式匹配查询用于根据正则表达式来匹配字段值。