LINUX.ORG.RU

One to Many (mongoose)

 , , , ,


0

1

Всем привет. Подскажите пожалуйста решение проблемы, самостоятельно разобраться не получилось. Я тренируюсь в написании api и пишу One to Many зависимость с помощью библиотеки @nestjs/mongoose.

У меня есть коллекции Users и Connections. У каждого пользователя может быть множество Connections, а у каждой Connections только 1 User. При создании новой Connection я указываю id пользователя в поле userId. Данное значение передается в метод createConnection, в connection.service. Проблема заключается в том, что я получаю 404 код, тк данный метод возвращает null. Подскажите пожалуйста, как я могу решить данную проблему?

https://github.com/h5d5m/api


Ну если все так как вы говорите, значит this.connectionModel.create вернул null. Вряд ли вам кто-то так сходу ответит почему, нужно отлаживать.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Забыл добавить. Null возвращает функция this.UserService.findUserById. Также сам null преобразовывается из undefined потому что в const existingUser я явно не указываю возвращаемое значение. Как раз в данном моменте у меня недопонимание - почему функция возвращает undefined, хотя UserService экспортирован и импортирован в ConnectionService, и по отдельности UserService работает без проблем?

Hedem
() автор топика

А почему у тебя везде где используется id тип string? Разве не должен быть ObjectId? Я бы посоветовал везде явно создавать Objectid через new ObjectId(id) и проверить.

Ну и в целом, конструкции типа return await ... не имеют смысла, await можно не писать.

neversleep ★★
()
Ответ на: комментарий от neversleep

Имеешь в виду поменять тип на ObjectId?

@Schema()
export class Connection extends mongoose.Document {
	@Prop({ type: String, default: function genUUID() {
		return uuidv4();
	} })
	_id: mongoose.ObjectId;
	
	@Prop({ required: true, unique:true })
  	privateKey: string;

  	@Prop({ required: true, unique:true })
  	ipv4Address: string;

	@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true })
	userId: mongoose.Types.ObjectId;
}
Hedem
() автор топика
Ответ на: комментарий от Hedem

Здесь тоже можно, я не знаток mongoose, но вообще в mongodb _id всегда имеет тип ObjectId так что логично. Имею ввиду:

async findUserById(id: string | ObjectId): Promise<User> {
  return this.userModel.findById(new ObjectId(id));
}

И везде где есть использование id (включаю userId и все остальные *Id) делать new ObjectId если там может быть string или другой тип.

neversleep ★★
()
2 июля 2024 г.

Create не возвращает по умолчанию ничего. Реляционные связи в mongo это плохая практика.. Нужен вложенный документ совсем нужным. Это же nosql. Нужны реляции - или к реляционным базам. В Mongo кошерно использовать связи для отчетов и подобной вещи, то есть там где не нужна скорость

entropy-ronin
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.