自动随机生成测试数据的文档,用于播种MongoDB数据库

时间:2019-05-24 17:55:01

标签: javascript json database mongodb seeding

我正在使用JSON Generator https://next.json-generator.com播种我的MongoDB数据库。我发现要从预定义的组中生成随机的一组颜色(从一到六种)很麻烦。

我成功生成了除颜色以外的所有其他属性值。我需要availableColors键来从六种预定义的集合中生成随机可变数量的颜色:“蓝色”,“棕色”,“绿色”,“白色”,“黄色”,“灰色”。

这里是在线生成器的URL,可以对其进行实时编辑:https://next.json-generator.com/E1g60a1pL

代码如下:

[
  {
    'repeat(5, 10)': {
      id: '{{objectId()}}',
      name: '{{firstName()}}',
      price: '{{floating(5, 4000, 2, "$0,0.00")}}',
      availableColors: (colors) => {
               var condition = '{{integer(1, 6)}}';
               var color = [];
               for (j = 0; j < condition+1; j++)
               {color [j] = '{{random("blue", "brown", "green",  "white", "yellow", "gray")}}';}
               let unique_array = [];
               for(let i = 0;i < color.length; i++) {
                   if(unique_array.indexOf(color[i]) == -1){
                      unique_array.push(color[i]);
                }
               }
               return unique_array;
},
      weight: '{{floating(1, 4000, 2, "0.00")}}',
      inStock: '{{integer(0, 2000)}}'
    }
  }
]

这是我得到的结果:

[
  {
    "id": "5ce82b1302c9777aac5fd681",
    "name": "Blake",
    "price": "$389.53",
    "availableColors": [],
    "weight": "3753.22",
    "inStock": 449
  },
  {
    "id": "5ce82b137ab9fe24eda22714",
    "name": "Felicia",
    "price": "$3,190.01",
    "availableColors": [],
    "weight": "3797.51",
    "inStock": 1288
  },
  {
    "id": "5ce82b135414eb7550aee368",
    "name": "Bettye",
    "price": "$227.41",
    "availableColors": [],
    "weight": "2182.52",
    "inStock": 1288
  },
  {
    "id": "5ce82b13f751e63a8506fbf2",
    "name": "Mullen",
    "price": "$3,306.81",
    "availableColors": [],
    "weight": "694.51",
    "inStock": 821
  },
  {
    "id": "5ce82b130544c7c08086a6bc",
    "name": "Angelita",
    "price": "$734.90",
    "availableColors": [],
    "weight": "3.44",
    "inStock": 226
  },
  {
    "id": "5ce82b130d9e2fc4c2a21e22",
    "name": "Mcknight",
    "price": "$3,582.76",
    "availableColors": [],
    "weight": "1183.82",
    "inStock": 1917
  },
  {
    "id": "5ce82b13fb509ee9c384a096",
    "name": "Nannie",
    "price": "$3,479.29",
    "availableColors": [],
    "weight": "754.85",
    "inStock": 716
  },
  {
    "id": "5ce82b13881cb29ec7a1772b",
    "name": "Sutton",
    "price": "$1,726.83",
    "availableColors": [],
    "weight": "1382.76",
    "inStock": 1911
  },
  {
    "id": "5ce82b1386ad13bffcf0923b",
    "name": "Maria",
    "price": "$1,679.58",
    "availableColors": [],
    "weight": "1106.28",
    "inStock": 5
  },
  {
    "id": "5ce82b13fccd87dbe6451971",
    "name": "Noble",
    "price": "$309.25",
    "availableColors": [],
    "weight": "1657.83",
    "inStock": 235
  }
]

我希望任何文档的“ availableColors”都是由一到六个预定义颜色组成的数组。有想法吗?

2 个答案:

答案 0 :(得分:1)

您需要使用Math.random进行纯JavaScript循环 我已经更新了链接: https://next.json-generator.com/EJXO4xfaU

答案 1 :(得分:0)

在深入研究了JSON Generator主页上提供的示例之后,我发现了如何使用其关键字来获得相同的结果。顺便说一句,按照我的文档架构,我添加了一种方式来随机提供是否为所有不需要的属性提供值。

以下是在线编辑器的网址:https://next.json-generator.com/4k8Wd87pU

代码如下:

  [
  {
    'repeat(5, 10)': {
      id: '{{objectId()}}',
      name: '{{firstName()}}',
      price (tags) {
      const nRequired = tags. integer (0,5);
      if (nRequired) {return tags.floating(5, 4000, 2, "$0,0.00");}
 },
      availableColors (tags) { 
      const nRequired = tags. integer (0,3);
      if (!nRequired) return;
      const Colors = ['blue','brown','green','white','yellow','gray'];
      const nColors = tags.integer(0, Colors.length - 1); // generate a random integer from 0 to 5 will be used to select the total number of colors to add as values
      const aColors =[];
      for (j = 0; j <= nColors && !aColors[j] ; j++) {
        let sColor = tags.integer(0, Colors.length - 1); // generate a random integer from 0 to 5 that will be used as index to select a random color from the Colors array
        if (aColors.indexOf(Colors[sColor]) == -1)    {aColors.push(Colors[sColor]);} 

  }
      return aColors; 
 },
      weight (tags) {
      const nRequired = tags.integer (0,5);
      if (nRequired) {return tags.floating(1, 900, 2, "0.00");}
 },
      inStock (tags) {
      const nRequired = tags.integer (0,2);
      if (nRequired) {return tags.integer(0, 2000);}
 }
    }
  }
]