首页 > 解决方案 > PyMongo 检查条目是否已经在数组中

问题描述

我希望有一组进入x网页的 IP 并将它们放在一个数组中。但是,现在每次连接一个 IP 时都会添加它,如果多个人连接多次,就会有很多重复。

目前我只是在使用

query = {"_id": paste_id, "ip": {"$ne": real_ip}
collection.update_one(query, {"$push": {"ip": ip}})

但这(逻辑上)只是将条目推入数组,有什么方法可以检查是否ip已经在数组中?

标签: pymongo

解决方案


更新的答案

您发布的更新代码正在检查real_ip然后插入ip;所以你没有检查你实际更新的项目。

我在下面的原始答案仍然是正确的方法;然而,这个完整的示例演示了尝试插入real_ip5 次,它显示该值仅插入一次:

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}}

推荐阅读