Mongo中如何查询数组中是否含有某值

1. 数组是数字、字符串

假设mongo的test集合中有如下的文档,

# documents
{'_id':xxx, 'name': '张三', 'visit_url': ['http://www.baidu.com', 'http://www.qq.com'], 'date': ISODate('2019-09-04 00:00:00')},
{'_id':xxx, 'name': '李四', 'visit_url': ['http://www.aliyun.com', 'http://www.qq.com'], 'date': ISODate('2019-09-04 12:00:00')},

在python脚本中使用pymongo执行mongo语句

import pymongo
client = pymongo.MongoClient('mongodb://your_user:your_password@host:port/') # 建立连接
db = client.my_db # 你的数据库 
filter_find = {'visit_url': {'$in': ['http://www.baidu.com']}}

# 在mongo中使用如下语句查询
result_set = list(db.test.find({filter_find}))

print(result_push)

2. 数组中是一个个对象

假设mongo的test集合中有如下的文档,

# documents
{'_id':xxx, 'name': '张三', 'visit_url': [{'proto', 'http', 'host': 'www.baidu.com'}, {'proto': 'https', 'host':'www.qq.com'}], 'date': ISODate('2019-09-04 00:00:00')},
{'_id':xxx, 'name': '李四', 'visit_url': [{'proto', 'https', 'host': 'aliyun.com'}, {'proto': 'https', 'host':'www.baidu.com'}, 'date': ISODate('2019-09-04 12:00:00')},

在python脚本中使用pymongo执行mongo语句

import pymongo
client = pymongo.MongoClient('mongodb://your_user:your_password@host:port/') # 建立连接
db = client.my_db # 你的数据库 
filter_find = {'visit_url': {'$elemMatch': {'proto': 'https', 'host': 'www.baidu.com'}}}

# 在mongo中使用如下语句查询
result_set = list(db.test.find({filter_find}))

print(result_push)

若是按照数组中元素的某字段排序

原文 mongo 数组元素检索与排序

db.getCollection('test').aggregate([
  //{'$match': {'codes.name': 'a'}}, // 检索文档
  {'$unwind': "$codes"},             // 拆分哪个数组数组
  //{'$match': {'codes.name': 'a'}}, // 检索数组元素
  {'$sort': {'codes._id': -1}},
  {'$skip': 2},
  {'$limit': 3} 
])

总结

主要是看需要查询的该数组的具体结构,如果数组中直接就是存放的值,那么就用第一中方法( i n in in),如果数组中存放的是一个个字典,那么用第二种方法( e l e m M a t c h elemMatch elemMatch)。

参考文献

[1] 如何查询MongoDB中,一个数组是否包含指定的数据
[2] mongodb对数组中的元素进行查询详解
[2] mongo 数组元素检索与排序

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值