pymongo - PyMongo 检查条目是否已经在数组中
问题描述
我希望有一组进入x
网页的 IP 并将它们放在一个数组中。但是,现在每次连接一个 IP 时都会添加它,如果多个人连接多次,就会有很多重复。
目前我只是在使用
query = {"_id": paste_id, "ip": {"$ne": real_ip}
collection.update_one(query, {"$push": {"ip": ip}})
但这(逻辑上)只是将条目推入数组,有什么方法可以检查是否ip
已经在数组中?
解决方案
更新的答案
您发布的更新代码正在检查real_ip
然后插入ip
;所以你没有检查你实际更新的项目。
我在下面的原始答案仍然是正确的方法;然而,这个完整的示例演示了尝试插入real_ip
5 次,它显示该值仅插入一次:
from pymongo import MongoClient
collection = MongoClient()['mydatabase'].collection
result = collection.insert_one({'ip': []})
paste_id = result.inserted_id
real_ip = '1.2.3.4'
for i in range(5):
query = {"_id": paste_id, "ip": {"$ne": real_ip}}
collection.update_one(query, {"$push": {"ip": real_ip}})
print(list(collection.find()))
印刷:
[{'_id': ObjectId('5feefdb862e2ed3ea952a035'), 'ip': ['1.2.3.4']}]
原始答案
Add a check that the IP is not already in the ip
array, e.g.
query = {'ip': {'$ne': ip}}
推荐阅读
- c - 如何在 Visual Studio 中修复“忽略返回值:'scanf'”代码 C6031
- google-cloud-platform - 使用新主机规则修补会删除 urlMaps API 中的旧主机规则集
- python - 是否有与 Unix '$' 等价的 python?命令?
- android - android应用程序收到通知时如何显示自定义对话框
- jquery - 如何使用语义 ui 提供按钮剥离效果
- javascript - 修改函数以调用给定的回调并返回其结果
- artificial-intelligence - RL 代理的批评损失
- javascript - 用下拉值替换 URL 的一部分 - onchange
- amazon-web-services - AWS 自定义授权方、身份服务器和范围
- html - 使背景图像响应