Mongo中$push和$addToSet的区别

示例

简单查询语句示例,
假设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和 addToSetpush的区别
[2] Mongodb 更新数组 $push 操作符和去重复更新数组 $addToSet 操作符使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值