Este es mi esquema de mangosta:
userId es un número único generado por Okta para los perfiles de usuario. '''
var book_listSchema = new mongoose.Schema({ userId:{type: String, required: true}, first_name: { type: String, required: true}, last_name:{ type: String, required: true}, newList: [{ list_name: String, books: [{ book_name: {type: String, required: true}, book_author: {type: String, required: true}, date_added: {type: Date, default: Date.now}, date_finished: {type: Date, default: Date.now}, }]}], }); '''Este es el código que estoy usando para buscar y actualizar, agregando un libro a la matriz de libros.
''' book_list.findOneAndUpdate({"userId": req.userContext.userinfo.sub, newList:{"newList.list_name": list_name}}, {$push:{books:{book_name: title, book_author:author, date_added: new Date()}}} '''La matriz de libros no se actualiza y cada objeto en newList tiene el nombre de lista, y hay diferentes listas, cada una con su propia matriz de libros, por lo que la lista correcta debe actualizarse cuando se agrega un libro.
Conjunto de datos de muestra:
''' _id:625c81d7622b044fb297ce54 userId:"00uvgyn7OikAwud6" first_name:"John" last_name:"Smith" newList:Array 0:Object list_name:"read" books:Array 0:Object book_name:"The Great Gatsby" book_author:"Francis Scott Fitzgerald" date_added:2022-04-19T00:43:24.248+00:00 _id:625e05ac083663dc44f37804 date_finished:2022-04-19T00:43:24.252+00:00 _id:625e05ac083663dc44f37803 __v:0 '''La forma correcta es:
db.collection.update({ userId: "00uvgyn7OikAwud6", newList: { $elemMatch: { list_name: "read" } } }, { $push: { "newList.$.books": { book_name: "a new book", book_author: "some author", date_added: new Date() } } })o en su forma de código
db.collection.update({ userId: req.userContext.userinfo.sub, newList: { $elemMatch: { list_name: list_name } } }, { $push: { "newList.$.books": { book_name: title, book_author: author, date_added: new Date() } } })$elemMatch le permite hacer coincidir más de un componente dentro del mismo elemento de matriz y luego puede usar $push para agregar el objeto específico en la matriz.
Puede ejecutarlo aquí para verificar la misma consulta https://mongoplayground.net/p/YnzDRfhwpEt
También puede echar un vistazo a la documentación de $elemMatch en este enlace .
Avíseme si tiene algún problema.