在验证它已经不存在之后将新项添加到数组中

时间:2018-05-07 13:46:36

标签: mongodb

我想在嵌入式数组中插入一个新项目,但在此之前我需要确保该项目在数组中不存在:  那是集合

Models.Member

我想在阵列中添加一个新帐户,但它必须是唯一的,这就像验证用户名/电子邮件不存在一样

2 个答案:

答案 0 :(得分:0)

您的架构设计有一个主要限制:如果您有足够的帐户,则文档可能大于16 MB,即the maximum document size in MongoDB

如果适用于您的用例,更好的解决方案是将accounts创建为单独的集合,而不是单个文档中的数组。这将实现两件事:

  1. 如果您的系统中有足够的帐户,则不会限制为16 MB的限制。
  2. 要在验证新帐户用户名是否唯一时添加新帐户,您可以在accounts集合上创建unique index。尝试插入具有重复用户名的文档将导致错误。

答案 1 :(得分:0)

我实际上设法解决了这个问题:

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

将验证用户是否存在而不是将其附加到帐户数组