#node.js #mongodb
#node.js #mongodb
Вопрос:
Я собираюсь сохранить идентификатор категории для элемента.
Я выполняю функцию below .save(), чтобы добавить новую строку.
const myNewItem = {
categoryId = ObjectId("5fc0a6e58dc3892120595384"),
title = "Apple"
}
var myNewItemSave = await new Item(myNewItem).save();
Однако, когда я проверяю свою запись в базе данных
_id: ObjectId("..."),
categoryId: "5fc0a6e58dc3892120595384",
title: "Apple"
Идентификатор категории не сохраняется как идентификатор объекта.
Я хочу сохранить его как ObjectId, потому что я собираюсь запросить некоторую поисковую агрегацию следующим образом: https://mongoplayground.net/p/50y2zWj-bQ6
поэтому я должен сделать так, чтобы localField и foreignField были того же типа, что и ObjectId.
Ответ №1:
Это происходит из-за того, что ваша схема не разрешает идентификатор категории в качестве идентификатора объекта mongoose, это строка
const schema = new Mongoose.Schema(
{
title: { type: String },
categoryId: { type: Mongoose.Schema.ObjectId, ref: 'categories' }
},
{ timestamps: true, versionKey: false }
)
export default Mongoose.model('Items', schema)
Импортируйте модель элемента и сохраните, чтобы преобразовать строку в mongoose ObjectId
const myNewItem = {
categoryId: "5fc0a6e58dc3892120595384",
title: "Apple"
}
const myNewItemSave = await Item.create(myNewItem);
Ответ №2:
@Ashok определяет тип в модели, если вы не хотите изменять модель, с помощью которой вы можете «преобразовать» идентификатор mongoose.Types.ObjectId
, например:
const mongoose = require('mongoose')
const myNewItem = {
categoryId = mongoose.Types.ObjectId("5fc0a6e58dc3892120595384"),
title = "Apple"
}