我正在创建一个 Mongoose 种子并创建“宠物”文档。对于我的数据库中的每个避难所(20 个文档),我想插入在我的代码的第一行中创建的宠物数组的随机数。
我希望得到:
收容所1:{狗:[“dog.id1”,“dog.id18”]}......收容所20:{狗:[“dog.id14”,“dog.id2”,“dog.id17”]}
这些宠物的数量和ID是随机的。
我已经尝试使用下面的代码,但是:虽然我没有收到任何错误,但我只得到了前两个带有“狗”的庇护所,其余的显示为空白:像这样:
收容所 1:{ 狗:[“dog.id1”,“dog.id18”] },收容所 2:{ 狗:[“dog.id2”] }...收容所 3-20:{ 狗:[ ] }
我想问题出在地图功能和我正在做的金额分配上。
const shelterPromises = shelters
.map((shelter) => {
const petAmount = randomNumber(1, 10);
const randomPets = pets.slice(prevIndex, petAmount);
if (randomPets.length) {
prevIndex = prevIndex + petAmount;
return ShelterModel.findByIdAndUpdate(shelter._id, {
dogs: randomPets
});
}
return null;
})
.filter(Boolean);
await Promise.all(shelterPromises);
console.info('> shelters updated!');
};
我的完整代码如下:
const faker = require('faker');
const PetModel = require('../models/Pets');
const ShelterModel = require('../models/Shelter');
const randomNumber = (min, max) =>
Math.floor(Math.random() * (max - min)) + min;
const randomArray = (array) => array[Math.floor(Math.random() * array.length)];
const randomMonthYear = ['Month', 'Year'];
const randomBreed = [
'Collie',
'Podenco',
'Breton',
'Mestizo',
'German Sheperd',
'Akbash',
'Husky',
'Golden Retriever',
'Basset Hound'
];
const createPets = async (rowsCount) => {
const pets = [];
for (let i = 0; i < rowsCount; i++) {
const {
name: { firstName },
lorem: { paragraph },
image: { animals },
date: { past }
} = faker;
const name = firstName();
const age = randomNumber(1, 20).toString();
const ageMonthYear = randomArray(randomMonthYear);
const weight = randomNumber(1, 80).toString();
const img = animals();
const breed = randomArray(randomBreed);
const dateArrivalInShelter = past();
const about = paragraph();
pets.push(
new PetModel({
name,
age,
ageMonthYear,
weight,
img,
breed,
dateArrivalInShelter,
about
})
);
}
await PetModel.insertMany(pets);
console.info('> pets created!');
const shelters = await ShelterModel.find({});
let prevIndex = 0;
const shelterPromises = shelters
.map((shelter) => {
const petAmount = randomNumber(1, 10);
const randomPets = pets.slice(prevIndex, petAmount);
if (randomPets.length) {
prevIndex = prevIndex + petAmount;
return ShelterModel.findByIdAndUpdate(shelter._id, {
dogs: randomPets
});
}
return null;
})
.filter(Boolean);
await Promise.all(shelterPromises);
console.info('> shelters updated!');
};
const dropPets = async () => {
await PetModel.deleteMany({});
console.info('> pets collection deleted!');
};
module.exports = {
createPets,
dropPets
};