La consulta de Mongoose rellena el ID de coincidencia de los elementos de búsqueda

TGeorge

Estoy intentando rellenar un modelo con datos de otro modelo. Esos dos modelos se ven así:

var postSchema = mongoose.Schema({
    _comments: { type: mongoose.Schema.Types.ObjectId, ref: 'Comment' },
    type: String,
    body: String,
});

var commentSchema = mongoose.Schema({
    id_post: mongoose.Schema.Types.ObjectId,
    body: String,
});

Quiero encontrar todos postsy poblarlos con los commentsque tienen id_post== _idde Publicaciones fundadas. Algo como esto:

Post.find({}).populate({
    path: '_comments',
    select: 'body',
    match: { post_id: Post._id }
    options: { limit: 5 }
})
.exec(function (err, posts){...});
O Guz

En primer lugar, hay algunos problemas en el código que escribió. Si cada publicación puede tener muchos comentarios, debe implementar una relación de uno a muchos entre sus esquemas, puede hacerlo rodeando la referencia del comentario con []

var postSchema = mongoose.Schema({
    _comments:  [ {type: mongoose.Schema.Types.ObjectId, ref: 'Comment'} ] ,
    type: String,
    body: String,
});

id_post no es solo un campo de tipo ObjectId, debe escribirse así:

var commentSchema = mongoose.Schema({
post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' },
body: String,
});

Al guardar un nuevo comentario, asegúrese de conectarlo a su publicación:

var comment = new Comment({
    body: "Hello",
    post: post._id    // assign the _id from the post
  }); 

comment.save(function (err) {
    if (err) return handleError(err);
    // thats it!
  });

Ahora, cuando desee encontrar una publicación y completar sus comentarios, debe escribir algo como esto:

Post
.find(...)
.populate({
  path: '_comments',
  select: 'body',
  options: { limit: 5 }
})
.exec()

La razón por la que eliminé la coincidencia es que la coincidencia debe usarse cuando desee filtrar de acuerdo con un campo específico, en su caso, puede usar la coincidencia para obtener solo comentarios con el tipo = 'algo'.

rellenar debería funcionar porque cuando insertó el comentario hizo el vínculo a su publicación.

Puede encontrar más información sobre la forma correcta de usar rellenar aquí - Mongoose Query Population

Los datos de la publicación deben conservarse de la siguiente manera:

{
   body: "some body",
   type: "some type",
   _comments: [12346789, 234567890, ...]
}

Más información sobre la forma en que se conservará la referencia aquí - Relaciones uno a varios con referencias de documentos

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Búsqueda elástica | Cómo obtener la consulta de búsqueda original con el valor de coincidencia correspondiente

Recuperar los primeros tres elementos de la matriz de la búsqueda de documentos según el ID

La búsqueda de $ agregada no devuelve el orden de la matriz original de los elementos

Cómo obtener los elementos de incremento de la página de búsqueda elástica

post__not_in no excluye los ID de la consulta de búsqueda de Wordpress

Consulta de búsqueda que devuelve el ID propio de los usuarios

Coincidencia de varios campos con una cadena de consulta de búsqueda elástica

consulta de coincidencia de búsqueda elástica sobre objeto de matriz

La consulta de búsqueda de varias etiquetas obtiene resultados solo por una coincidencia de etiqueta

ElasticSearch DSL Coincidencia de todos los elementos de la consulta en la lista de la lista de cadenas

La búsqueda elástica excluye un elemento anidado de los resultados de búsqueda, obtiene el elemento por id

La búsqueda elástica excluye un elemento anidado de los resultados de búsqueda, obtiene el elemento por id

Consulta de coincidencia múltiple con condición Y en php de búsqueda elástica

La consulta de `filtro` de búsqueda elástica no funciona

Obtenga * todos * los ID de video de Youtube de un canal elegido sin usar la consulta de búsqueda

Los rieles no pasan la consulta DB en el formulario de búsqueda

MSSQL: obtenga el porcentaje de coincidencia según los criterios de la consulta

La consulta de búsqueda elástica no devuelve resultados

La consulta de búsqueda elástica no devuelve resultados

Consulta de filtro: no nulo en la búsqueda elástica

Agregar una propiedad a los elementos de la matriz da como resultado "El operador posicional no encontró la coincidencia necesaria en la consulta"

¿Cómo extraigo el intervalo y la coincidencia de una búsqueda de expresiones regulares?

Javascript - comprobar la coincidencia de búsqueda anticipada de matrices

Controlar la salida de la consulta de búsqueda de NHIbernate con respecto a los parámetros

Usar el valor de la variable en la consulta de archivos de búsqueda de DriveApp

Sistema de búsqueda de elementos del sub-conjunto de padres-array, si el padre-array tiene los mismos elementos de la sub-matriz?

El término de consulta de búsqueda elástica devuelve todos los datos.

consulta de búsqueda elástica basada en el valor de los atributos

¿Cómo excluir elementos de una consulta de búsqueda?

TOP Lista

CalienteEtiquetas

Archivo