Автоматическая генерация случайных тестовых данных документов для заполнения базы данных MongoDB - PullRequest
0 голосов
/ 24 мая 2019

Я использую 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 ]

1 голос
/ 26 мая 2019

После глубокого изучения примера, представленного на домашней странице JSON Generator, я обнаружил, как использовать его ключевые слова для получения того же результата. Кстати, следуя схеме моего документа, я добавил способ случайным образом указывать или не указывать значения для всех свойств, которые не требуются.

Вот URL к онлайн-редактору: 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);
      }
    }
  }
}]
1 голос
/ 25 мая 2019

Вам нужно было сделать чистый цикл javascript с помощью Math.random Я обновил ссылку: https://next.json -generator.com / EJXO4xfaU

...