sql >> Base de Datos >  >> NoSQL >> MongoDB

Tratando de llenar en mangosta solo si la referencia no es nula, no funciona

necesita comprender el orden de ejecución de su código:

  1. mongoose obtiene todos los libros de la base de datos donde {_creator:{$ne:null}} . Mongo solo está mirando la referencia dentro de la colección de libros para determinar qué documentos devolver. Su libro todavía tiene una referencia a un autor, y mongo no notará que no hay un Autor coincidente en la colección de Autores, por lo que su libro está cargado.

  2. mongoose está completando todos los resultados devueltos:por lo que está cargando los autores de la colección Authors y reemplaza las referencias con los objetos reales. Para su libro no encuentra un autor coincidente, por lo que pone el null allá.

Es por eso que terminas con tu lista de resultados.

Mongo no admite combinaciones; por lo tanto, no puede realizar una consulta que incluya datos de más de una colección. Completar es solo una forma de reemplazar referencias en su lista de resultados con datos reales, nunca puede usar datos completos como parte de sus cláusulas where.

Para resolver su problema puede:

  • filtre su lista de resultados final en código JS, p. con _.filter de la biblioteca lodash.
  • actualice todos sus libros y elimine la referencia cada vez que elimine un autor. Puede usar ganchos en el esquema de autor para hacer esto.

AuthorSchema.post('remove', function(doc) {// update your books here});