在环回模型中将数据推入阵列

时间:2019-05-21 06:24:46

标签: javascript node.js mongodb mongodb-query loopbackjs

我是Loopback的新手,正在从事一个具有以下模型和文档的项目。

{
    "_id" : ObjectId("5c9b44cc618c1bbe8780e38b"),
    "userId" : ObjectId("5bae3ea215e11e0018b914c1"),
    "providers" : [ 
        "1629132790", 
        "1467401216", 
        "1356405641", 
        "1952465288", 
        "1447314513", 
        "1003803495"
    ],
    "countByType" : {
        "doctors" : 2,
        "laboratories" : 3,
        "hospitals" : 1,
        "imagingCenters" : 0
    }
}

我基本上是在尝试向基类Model中的数组添加新项。 创建新用户时,将为“提供者”添加一个空数组。没有提供者的模型。它只是一个可以容纳提供者列表的数组。

如果providerId不存在,如何将新的providerId添加到提供商列表中(在列表中添加字符串)?

这是我的提供者模型

{
  "name": "UserProviders",
  "base": "Model",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "userId": {
      "type": "objectId",
      "required": true,
      "index": {
        "unique": true
      }
    },
    "providers": {
      "type": [
        "any"
      ],
      "default": []
    },
    "countByType": {
      "type": "object",
      "default": {
        "doctors": 0,
        "labs": 0,
        "hospitals": 0,
        "imagingCenters": 0
      }
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我将做两件事:首先,我将添加一个自定义模型方法来添加新的提供程序(接受一个字符串或字符串数​​组),例如:

const provider = async Provider.findOne({id: someId});
provider.addProviders([value1, value2]);
await provider.save();

然后,为确保它不会保存垃圾值,我将添加一个自定义验证器,该验证器在保存实例并引发错误或删除重复项之前检查数组中是否存在重复项。您可以阅读here如何向模型添加自定义验证功能。