¿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.component
no 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 4
apoya 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
page
tiene 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
$lookup
agregació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
populate
y también quiere hacer esto:clients
,users
,rooms
,messasges
.refPath
o referencia dinámicapopulate
conpath
ymodel
opcionesfindOneAndReplace
/replaceOne
con$exists
CONTEXTO
Objetivo
clients
,users
ybot
.clients
ousers
con 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.js
archivo) 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 utilidadgetSenderModel
que se usa enpopulate()
. Esto se debe al bot. Elsender.type
puede ser:users
con su base de datos,clients
con su base de datos ybot
sin una base de datos. ElrefPath
verdaderas necesidades de referencia de modelo, si no, Mongooose emite un error.sender._id
puede ser de tipoObjectId
para usuarios y clientes, onull
para el bot.Para la lógica de solicitud de API:
quickReply
mensaje (Message DB debe tener solo una QuickReply, pero tantos mensajes de texto simples como desee). Usamos el enfindOneAndUpdate
lugar dereplaceOne
ofindOneAndReplace
.findOneAndUpdate
) y lapopulate
operación con lacallback
de 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 .overwrite
opción y sin$set
operador de consulta.upsert
opción.findOneAndUpdate
y parapopulate()
.populate
, creamos una referencia de modelo dinámica personalizada congetSenderModel
. Podemos utilizar la referencia dinámica Mangosta porque elsender.type
debot
no tiene ningún modelo de mangosta. Usamos una base de datos que se completa conmodel
ypath
optins.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