首页 > 解决方案 > 在 Loopback 模型中将数据推送到数组中

问题描述

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

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

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

如果 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": {}
}

任何帮助将非常感激。

标签: javascriptnode.jsmongodbmongodb-queryloopbackjs

解决方案


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

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

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


推荐阅读