MongoDB的查询方法

1. MongoDB的基本概念

MongoDB是一种面向文档的数据库管理系统,它是由C++语言编写而成的。与传统的关系型数据库不同,MongoDB使用文档(document)来存储和表示数据。

文档是一种由键值对组成的结构,键值对被称为字段。在MongoDB中,每一个文档都有一个唯一的_id标识符,它是一个12字节的 BSON 类型的值。BSON 类型是指二进制 JSON(JavaScript Object Notation)

2. MongoDB的查询语句

2.1 基本查询

在MongoDB中,使用find()函数进行查询。如下语句表示在mydb的user集合中查找所有文档:

db.user.find()

find()函数的参数可以为查询条件,如下语句表示查询年龄为20的用户:

db.user.find({age:20})

在查询结果中,可以使用pretty()函数将结果格式化:

db.user.find().pretty()

下面是一个完整的基本查询示例:

db.user.insertMany([

{ name: "Jack", age: 20, sex: "male" },

{ name: "Alice", age: 25, sex: "female" },

{ name: "Bob", age: 30, sex: "male" }

])

db.user.find()

查询结果如下:

{

"_id" : ObjectId("5f5c16b56058f7417f0b10f9"),

"name" : "Jack",

"age" : 20,

"sex" : "male"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fa"),

"name" : "Alice",

"age" : 25,

"sex" : "female"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fb"),

"name" : "Bob",

"age" : 30,

"sex" : "male"

}

2.2 比较查询

使用比较操作符进行查询,如下语句表示查询年龄大于25的用户:

db.user.find({age:{ $gt: 25 }})

其他比较操作符包括 $lt 小于、$lte小于等于、$ne 不等于等。下面是一个比较查询的示例:

db.user.find({age:{ $lt: 30, $gte: 20 }})

查询结果如下:

{

"_id" : ObjectId("5f5c16b56058f7417f0b10f9"),

"name" : "Jack",

"age" : 20,

"sex" : "male"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fb"),

"name" : "Bob",

"age" : 30,

"sex" : "male"

}

2.3 逻辑查询

在MongoDB中,可以使用逻辑操作符进行复杂查询。逻辑操作符包括 $and、$or、$not、$nor。

如下语句表示查询性别为男且年龄大于等于25的用户:

db.user.find({$and:[{sex:"male"},{age:{ $gte: 25 }}]})

下面是一个逻辑查询的示例:

db.user.find({$or:[{sex:"male"},{age:{$lt:25}}]})

查询结果如下:

{

"_id" : ObjectId("5f5c16b56058f7417f0b10f9"),

"name" : "Jack",

"age" : 20,

"sex" : "male"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fb"),

"name" : "Bob",

"age" : 30,

"sex" : "male"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fa"),

"name" : "Alice",

"age" : 25,

"sex" : "female"

}

2.4 嵌套查询

MongoDB的文档支持嵌套结构,可以使用点操作符进行嵌套查询。

如下语句表示查询家乡为北京的用户:

db.user.find({"address.hometown": "北京"})

下面是一个嵌套查询的示例:

db.user.insertOne({

"name": "David",

"age": 35,

"address": {

"hometown": "上海",

"city": "上海"

}

})

db.user.find({"address.city": "上海"})

查询结果如下:

{

"_id" : ObjectId("5f5c2e895bbfe845a9fa5e76"),

"name" : "David",

"age" : 35,

"address" : {

"hometown" : "上海",

"city" : "上海"

}

}

2.5 正则表达式查询

在MongoDB中,可以使用正则表达式进行模糊查询。

如下语句表示查询名字中包含字母o的用户:

db.user.find({name:/.*o.*/})

下面是一个正则表达式查询的示例:

db.user.find({name:/^J.*/})

查询结果如下:

{

"_id" : ObjectId("5f5c16b56058f7417f0b10f9"),

"name" : "Jack",

"age" : 20,

"sex" : "male"

}

2.6 聚合查询

在MongoDB中,可以使用聚合查询进行统计分析。

如下语句表示对年龄进行分组统计:

db.user.aggregate([{$group:{_id:"$age",count:{$sum:1}}}])

下面是一个聚合查询的示例:

db.user.aggregate([

{$match:{age:{$gt:20}}},

{$group:{_id:"$sex",count:{$sum:1}}}

])

查询结果如下:

{

"_id" : "male",

"count" : 2

}

{

"_id" : "female",

"count" : 1

}

2.7 模糊查询

在MongoDB中,可以使用 $in、$nin 操作符进行模糊查询。

如下语句表示查询名字为Jack、Alice、Bob的用户:

db.user.find({name:{$in:["Jack", "Alice", "Bob"]}})

下面是一个模糊查询的示例:

db.user.find({name:{$nin:["David", "Mike"]}})

查询结果如下:

{

"_id" : ObjectId("5f5c16b56058f7417f0b10f9"),

"name" : "Jack",

"age" : 20,

"sex" : "male"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fa"),

"name" : "Alice",

"age" : 25,

"sex" : "female"

}

{

"_id" : ObjectId("5f5c16b56058f7417f0b10fb"),

"name" : "Bob",

"age" : 30,

"sex" : "male"

}

3. 总结

MongoDB提供了多种查询方法,包括基本查询、比较查询、逻辑查询、嵌套查询、正则表达式查询、聚合查询和模糊查询等。熟练掌握这些查询方法,将有助于更高效地处理数据。

数据库标签