¿Cómo puedo completar "componentes" en el documento de ejemplo:
{
"__v": 1,
"_id": "5252875356f64d6d28000001",
"pages": [
{
"__v": 1,
"_id": "5252875a56f64d6d28000002",
"page": {
"components": [
"525287a01877a68528000001"
]
}
}
],
"author": "Book Author",
"title": "Book Title"
}
Este es mi JS donde obtengo el documento de Mongoose:
Project.findById(id).populate('pages').exec(function(err, project) {
res.json(project);
});

...populate('pages pages.page.components').exec..., obtengo lo mismo que se indica en el documento de ejemplo. Nada cambia.Respuestas:
Mongoose 4.5 admite esto
Y puedes unirte a más de un nivel profundo
fuente
pages.$.page.componentno lo espages.$.component. ¿Cómo sabe buscar en el objeto de página?Funciona para mi:
Documentación: Model.populate
fuente
Como han señalado otros,
Mongoose 4apoya esto. Es muy importante tener en cuenta que también puede recurrir a más de un nivel, si es necesario, aunque no se indica en los documentos:fuente
Puede completar varios documentos anidados como este.
fuente
populate: ['components','AnotherRef']populate: 'components AnotherRef'Es la mejor solución:
fuente
pagetiene otras propiedades no poblables.Encontré esto muy útil para crear un feathersjs before hook para poblar una relación profunda de nivel 2 ref. Los modelos de mangosta simplemente tienen
luego en feathersjs antes del gancho:
Tan simple en comparación con algunos otros métodos que estaba tratando de lograr esto.
fuente
Encontré esta pregunta a través de otra pregunta que era específica de KeystoneJS pero que estaba marcada como duplicada. Si alguien aquí podría estar buscando una respuesta de Keystone, así es como hice mi consulta de relleno profundo en Keystone.
Población de dos niveles de mangosta usando KeystoneJs [duplicado]
fuente
También puede hacer esto usando
$lookupagregación y probablemente la mejor manera, ya que ahora poblar se está extinguiendo del mongo.fuente
Mongoose 5.4 admite esto
fuente
Para alguien que tiene el problema
populatey también quiere hacer esto:clients,users,rooms,messasges.refPatho referencia dinámicapopulateconpathymodelopcionesfindOneAndReplace/replaceOnecon$existsCONTEXTO
Objetivo
clients,usersybot.clientsouserscon sus modelos Mongoose. _sender type client models isclients, for user isusers.Esquema de mensaje :
SOLUCIÓN
Mi solicitud de API del lado del servidor
Mi código
Función de utilidad (en
chatUtils.jsarchivo) para obtener el tipo de mensaje que desea guardar:El lado de mi servidor (usando Nodejs) para obtener la solicitud de guardar el mensaje:
CONSEJOS :
Para la base de datos:
refPath, usamos la utilidadgetSenderModelque se usa enpopulate(). Esto se debe al bot. Elsender.typepuede ser:userscon su base de datos,clientscon su base de datos ybotsin una base de datos. ElrefPathverdaderas necesidades de referencia de modelo, si no, Mongooose emite un error.sender._idpuede ser de tipoObjectIdpara usuarios y clientes, onullpara el bot.Para la lógica de solicitud de API:
quickReplymensaje (Message DB debe tener solo una QuickReply, pero tantos mensajes de texto simples como desee). Usamos el enfindOneAndUpdatelugar dereplaceOneofindOneAndReplace.findOneAndUpdate) y lapopulateoperación con lacallbackde cada uno. Esto es importante si usted no sabe si el usoasync/await,then(),exec()ocallback(err, document). Para obtener más información, consulte Populate Doc .overwriteopción y sin$setoperador de consulta.upsertopción.findOneAndUpdatey parapopulate().populate, creamos una referencia de modelo dinámica personalizada congetSenderModel. Podemos utilizar la referencia dinámica Mangosta porque elsender.typedebotno tiene ningún modelo de mangosta. Usamos una base de datos que se completa conmodelypathoptins.He pasado muchas horas resolviendo pequeños problemas aquí y allá y espero que esto ayude a alguien. 😃
fuente
Luché con esto durante todo un maldito día. Ninguna de las soluciones anteriores funcionó. Lo único que funcionó en mi caso fue un ejemplo como el siguiente:
es hacer lo siguiente: (Suponiendo que se completa después de buscar, pero también funciona cuando se llama a poblar desde la clase Modelo (seguido de exec))
En otras palabras, la propiedad de la ruta más externa debe contener la ruta completa. No parece funcionar ninguna ruta parcialmente completa junto con propiedades de poblado (y la propiedad del modelo no parece ser necesaria; tiene sentido ya que está incluida en el esquema). ¡Me tomó un maldito día darme cuenta de esto! No estoy seguro de por qué los otros ejemplos no funcionan.
(Utilizando Mongoose 5.5.32)
fuente
Quitar referencia de documentos
Esto funcionó para mí.
fuente