Невозможно создать уникальный индекс для нескольких параметров в моторном питоне.Еще вставить старые документы - PullRequest
0 голосов
/ 22 сентября 2018

Я начинающий с питона.В настоящее время я работаю с моторным (asyncio pymongo) питоном.Я пытаюсь разместить данные в своей базе данных, как показано ниже, и создаю уникальный индекс для даты, тикера и времени:

import asyncio
import motor.motor_asyncio
import time
import datetime
import pymongo

client = motor.motor_asyncio.AsyncIOMotorClient("host","port")
dbPrice = client["CheckPost"]
Time = datetime.datetime.now()
Time.date()

async def Check():
    dataCheck = [{"Ticker": "ACB",
                  "ForeignBuyQ": 1200, 
                  "ForeignSellQ": 1700,
                  "TotalMatchQ": 321311,
                  "Time":151543431},               
                 {"Ticker": "BMP",
                  "ForeignBuyQ": 1400,
                  "ForeignSellQ": 1800,
                  "TotalMatchQ": 424311,
                  "Time": 151543531},                
                 {"Ticker": "ROS",
                  "ForeignBuyQ":140420,
                  "ForeignSellQ":11800,
                  "TotalMatchQ":652424311,
                  "Time":151543731},              
                 {"Ticker":"FLC",
                  "ForeignBuyQ":180210,
                  "ForeignSellQ":179200,
                  "TotalMatchQ":975424311,
                  "Time":151543931},
                 {"Ticker":"ART",
                  "ForeignBuyQ":18220210,
                  "ForeignSellQ":17921200,
                  "TotalMatchQ":97542124311,
                  "Time":151543931}]
    for data in dataCheck:
        data.setdefault("Time",int(time.mktime(Time.timetuple())))
        if not await dbPrice["StockVCSC"].find_one({"Date":int(time.mktime(Time.date().timetuple()))}):
            await dbPrice["StockVCSC"].insert_one({"Date":int(time.mktime(Time.date().timetuple())),
                                                   "Data":[data]})
        else:
            await dbPrice["StockVCSC"].update_one({"Date":int(time.mktime(Time.date().timetuple()))},
                                                  {"$push":{"Data":data}})

    await dbPrice["StockVCSC"].create_index([("Date", pymongo.ASCENDING),(
                                              "Data.Ticker", pymongo.ASCENDING),(
                                              "Data.Time", pymongo.ASCENDING)], unique = True)

loop = asyncio.get_event_loop()
loop.run_until_complete(Check())

Но когда я проверяю, чтобы вставить эти документы выше, они все равно вставляются в мои базы данных без предупреждения

Traceback (most recent call last): DuplicateKeyError: E11000 duplicate
key error index:

Можете ли вы помочь мне, где я пропустил.

Большое спасибо

...