PyMongo 检查条目是否已经在数组中

PyMongo checking if entry is already in array

我想要一组访问 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']}]

原始答案

添加检查 IP 是否已在 ip 数组中,例如

query = {'ip': {'$ne': ip}}