title: MongoDB 查询操作文档
date: 2023-09-23 13:35:49
categories:
- 大数据技术
tags:
目录
文档查询条件的使用
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} | db.col.find({"by":"x"}).pretty() | where by = 'x' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
创建一个表文档,里面的数据可以使用这些语法的
db.createCollection("col")
db.col.insertMany([
{
"title": "Document 1",
"by_user": "User1",
"likes": 55
},
{
"title": "Document 2",
"by_user": "User2",
"likes": 42
},
{
"title": "Document 3",
"by_user": "User1",
"likes": 60
}
])
聚合查询
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 计算平均值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
创建示例表文档
db.createCollection("dianji")
s= [{ "_id": 1, "by_user": "Alice", "likes": 10, "url": "http://example.com/1" },
{ "_id": 2, "by_user": "Bob", "likes": 15, "url": "http://example.com/2" },
{ "_id": 3, "by_user": "Alice", "likes": 8, "url": "http://example.com/3" },
{ "_id": 4, "by_user": "Bob", "likes": 20, "url": "http://example.com/4" }]
db.dianji.insert(s)
$sum - 计算总和
计算每个用户(by_user)的点赞总数:
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
num_likes: { $sum: "$likes" }
}
}
])
$avg - 计算平均值
计算每个用户(by_user)的点赞平均值:
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
avg_likes: { $avg: "$likes" }
}
}
])
$min - 获取最小值
获取每个用户(by_user)的最低点赞数:
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
min_likes: { $min: "$likes" }
}
}
])
$max - 获取最大值
获取每个用户(by_user)的最高点赞数:
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
max_likes: { $max: "$likes" }
}
}
])
$push - 插入值到数组
创建每个用户(by_user)的URL数组:
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
urls: { $push: "$url" }
}
}
])
$addToSet - 插入唯一值到数组
创建每个用户(by_user)的唯一URL数组(去重):
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
unique_urls: { $addToSet: "$url" }
}
}
])
$first - 获取第一个文档数据
对每个用户(by_user)按照某个排序字段获取第一个URL:
db.mycol.aggregate([
{
$group: {
_id: "$by_user",
first_url: { $first: "$url" }
}
}
])