добавить новый элемент в массив после проверки того, что он уже не существует - PullRequest
0 голосов
/ 07 мая 2018

Я хочу вставить новый элемент во встроенный массив, но перед этим мне нужно убедиться, что этот элемент еще не существует в массиве: вот коллекция

"Accounts":[
{
    "Account_id" : 70,
    "FirstName" : "name",
    "LastName" : "bffff",
    "Username" : "deee",
    "Password" : "xyzqds@j",
    "AccountType" : "admin",
    "Created_at" : "01-01-2018",
    "Rules" : {
        "Goal" : 480,
        "DoNotDisturbFrom" : "22",
        "DoNotDisturbTo" : "8",
        "Frequency" : "weekly"
    }
},
{
    "Account_id" : 52,
    "FirstName" : "joe",
    "LastName" : "Doe",
    "Username" : "aajengui1",
    "Password" : "abc@j",
    "AccountType" : "user",
    "Created_at" : "01-02-2018",
    "Rules" : {
        "Goal" : 260,
        "DoNotDisturbFrom" : "10",
        "DoNotDisturbTo" : "12",
        "Frequency" : "monthly"
    }
}

]

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Мне действительно удалось сделать это, что решило проблему m:

data = request.get_json()
    findOneuser=customers.find({"Customer_id": customer_id, "Accounts.Username": data["Username"]},
         {"Accounts.Username.$": 1, "_id": 0})
    print(findOneuser.count())
    if findOneuser.count() == 0:
        customers.update(
            {"Customer_id": customer_id},
            {"$addToSet": {
                "Accounts":
                    {
                        "Account_id": data["Account_id"],
                        "FirstName": data["FirstName"],
                        "LastName": data["LastName"],
                        "Username": data["Username"],
                        "AccountType": "user",
                        "Created_at": data["Created_at"]} 

здесь это API, где я получаю данные новой учетной записи в формате JSON

> findOneuser

проверит, существует ли пользователь, и добавит его в массив учетных записей

0 голосов
/ 08 мая 2018

У вашей схемы есть серьезное ограничение: если у вас достаточно учетных записей, размер документа может быть больше 16 МБ, что составляет максимальный размер документа в MongoDB .

Если применимо к вашему варианту использования, лучшим решением будет создание accounts в виде отдельной коллекции, а не в виде массива в одном документе. Это позволит достичь двух вещей:

  1. Вы не будете ограничены ограничением в 16 МБ, если в вашей системе достаточно учетных записей.
  2. Чтобы добавить новую учетную запись при проверке уникальности имени пользователя новой учетной записи, вы можете создать уникальный индекс для коллекции accounts. Попытка вставить документ с повторяющимся именем пользователя приведет к ошибке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...