Сохранение идентификатора объекта в качестве эталонной дозы не работает в NodeJS MongoDB

#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"
}