У меня есть набор документов в MongoDB, который выглядит так:
{"_id": 1, "array": [{"id": 1, "content": "..."}, {"id": 2, "content": "..."}]}
{"_id": 2, "array": [{"id": 1, "content": "..."}, {"id": 2, "content": "..."}, {"a_id": 3, "content": "..."}]}
, и я хочу убедиться, что в каждом документе нет дубликатов array.id
. Итак, приведенный пример в порядке, но следующий - нет:
{"_id": 1, "array": [{"id": 1, "content": "..."}, {"id": 1, "content": "..."}]}
Мой вопрос в том, как это сделать (желательно в PyMongo
).
EDIT
Я пробовал следующий код, который, как я думал, создаст ключ на (_id, array.id)
, но если вы его запустите, этого не произойдет:
from pymongo import MongoClient, ASCENDING
client = MongoClient(host="localhost", port=27017)
database = client["test_db"]
collection = database["test_collection"]
collection.drop()
collection.create_index(keys=[("_id", ASCENDING),
("array.id", ASCENDING)],
unique=True,
name="new_key")
document = {"array": [{"id": 1}, {"id": 2}]}
collection.insert_one(document)
collection.find_one_and_update({"_id": document["_id"]},
{"$push": {"array": {"id": 1}}})
updated_document = collection.find_one({"_id": document["_id"]})
print(updated_document)
, который выводит (обратите внимание, что есть два объекта с id = 1
в array
). Я ожидал бы исключения.
{'_id': ObjectId('5eb51270d6d70fbba739e3b2'), 'array': [{'id': 1}, {'id': 2}, {'id': 1}]}