示例
简单查询语句示例,
假设mongo的test集合中有如下的文档,
# documents
{'_id':xxx, 'name': '张三', 'visit_url': 'http://www.baidu.com', 'date': ISODate('2019-09-04 00:00:00')},
{'_id':xxx, 'name': '张三', 'visit_url': 'http://www.qq.com', 'date': ISODate('2019-09-04 01:00:00')},
{'_id':xxx, 'name': '李四', 'visit_url': 'http://www.aliyun.com', 'date': ISODate('2019-09-04 12:00:00')},
{'_id':xxx, 'name': '王五', 'visit_url': 'http://www.csdn.net', 'date': ISODate('2019-09-04 11:00:00')},
{'_id':xxx, 'name': '王五', 'visit_url': 'http://www.baidu.com', 'date': ISODate('2019-09-04 10:00:00')},
{'_id':xxx, 'name': '张三', 'visit_url': 'http://www.taobao.com', 'date': ISODate('2019-09-04 09:00:00')},
{'_id':xxx, 'name': '张三', 'visit_url': 'http://www.baidu.com', 'date': ISODate('2019-09-04 09:01:00')},
{'_id':xxx, 'name': '王五', 'visit_url': 'http://www.csdn.net', 'date': ISODate('2019-09-04 12:01:00')},
在python脚本中使用pymongo执行mongo语句
import pymongo
client = pymongo.MongoClient('mongodb://your_user:your_password@host:port/') # 建立连接
db = client.my_db # 你的数据库
agg_push = [
{'$group': {'_id': 'nanme', 'url': {'$push': '$visit_url'}}},
]
agg_set = [
{'$group': {'_id': 'nanme', 'url': {'$addToSet': '$visit_url'}}},
]
# 在mongo中使用如下语句查询
result_push = list(db.test.aggregate(agg_push))
result_set = list(db.test.aggregate(agg_set))
print(result_push)
# 输出:[
# {'_id': '张三', 'url': ['http://www.baidu.com', 'http://www.qq.com', 'http://www.taobao.com', 'http://www.baidu.com']},
# {'_id': '李四', 'url': ['http://www.aliyun.com']},
# {'_id': '王五', 'url': ['http://www.csdn.net', 'http://www.baidu.com', 'http://www.csdn.net']}
# ]
print(result_set)
# 输出:[
# {'_id': '张三', 'url': ['http://www.baidu.com', 'http://www.qq.com', 'http://www.taobao.com']},
# {'_id': '李四', 'url': ['http://www.aliyun.com']},
# {'_id': '王五', 'url': ['http://www.csdn.net', 'http://www.baidu.com']}
# ]
总结
$push只是将值加入一个数组中,并不管相同的值是否已经在数组中存在了,也就是说这是不去重的。
$addToSet是将值加入一个数组中,若相同的值在数组中已经存在了,则不再重复加入,也就是说这是去重的。
参考文献
[1] MongoDb中
a
d
d
T
o
S
e
t
和
addToSet和
addToSet和push的区别
[2] Mongodb 更新数组 $push 操作符和去重复更新数组 $addToSet 操作符使用