Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

149
Vistas
Necesito completar solo registros activos en mongodb

Estoy tratando de buscar una colección secundaria en mongodb usando moongose en node.js pero buscará todos los registros secundarios, quiero buscar solo registros activos.

La colección principal es la colección secundaria de usuarios: publicación que contiene una publicación publicada por el usuario y tiene un ID de usuario como referencia de la colección de usuarios. Intenté debajo de la consulta pero no tuve suerte

Muestra de colección de usuario:

 { "_id" : ObjectId("584016e28880811461000007"), "fname" : "Test", "lname" : "user", "email" : "test@user.com", }, { "_id" : , "fname" : "Test2", "lname" : "user2", "email" : "test2@user.com", }

Muestra posterior a la colección:

 { "_id" : ObjectId("5863aed8cafb42674600000e"), "user_id" : ObjectId("584016e28880811461000007"), "title" : "Post 1", "is_deleted" : false }, { "_id" : , "user_id" : ObjectId("584016e28880811461000007"), "title" : "Post 2", "is_deleted" : true }

Consulta que probé:

 Users.collection.aggregate([ { $lookup: {from: "Posts", localField: "_id", foreignField: "user_id", as: "Posts"} }, { $match : { $or : [{"Posts._id" : {$exists : true}, "Posts.is_deleted" : false}] }}, {$project: {fname: "$fname", lname : "$lname", email : "$email", "publishedPosts" : {$size : "$Posts"}}} ])

Resultado que obtuve del código anterior:

 [ {"fname" : "Test", "lname" : "user", "email" : "test@user.com", "publishedPosts" : 2}, {"fname" : "Test2", "lname" : "user2", "email" : "test2@user.com", "publishedPosts" : 0} ]

Resultado esperado:

 [ {"fname" : "Test", "lname" : "user", "email" : "test@user.com", "publishedPosts" : 1}, {"fname" : "Test2", "lname" : "user2", "email" : "test2@user.com", "publishedPosts" : 0} ]

busca todas las publicaciones, si is_deleted es falso o verdadero

Por favor, ayúdenme con una consulta similar que funcione para mí.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La etapa $match que estás usando es incorrecta. La primera condición ( {"Posts._id" : {$exists : true} ) es inútil porque cada documento debe tener un campo _id (consulte el campo mongodb _id para obtener más detalles).

Actualización: Realice la etapa $match antes de $lookup para obtener mejores resultados. Busque desde Publicaciones a Usuarios, luego relaje Usuarios y agrupe documentos para la suma

esta consulta devuelve el resultado que espera:

 db.Posts.aggregate([ { $match:{ is_deleted:false } }, { $lookup:{ from:"Users", localField:"user_id", foreignField:"_id", as:"Users" } }, { $unwind:"$Users" }, { $group:{ _id:"$user_id", lname:{ $first:"$Users.lname" }, fname:{ $first:"$Users.fname" }, email:{ $first:"$Users.email" }, publishedPosts:{ $sum:1 } } } ])

producción:

 { "_id" : ObjectId("584016e28880811461000007"), "lname" : "user", "fname" : "Test", "email" : "test@user.com", "publishedPosts" : 1 }
over 4 years ago · Santiago Trujillo Denunciar

0

puedes probar esto, funciona

colección de la tienda

 { name:"shop1", status:true, _id : ObjectId("583d0c1f2bd2cbdb117053c5") } { name:"shop2", status:false, _id : ObjectId("583d0c1f2bd2cbdb117053c6") }

recogida de pedidos

 { orderNo:1, price:100, product:"product1", shop:ObjectId("583d0c1f2bd2cbdb117053c5") }

prueba esto

 db.getCollection('orders').aggregate([ { $lookup: { from: "shop", localField: "shop", foreignField: "_id", as: "shopData" } }, { $match : { $or: [ { "shopData.status": true}] } } ])

resultado :

 [{ orderNo:1, price:100, product:"product1", shop:[{ name:"shop1", status:true, _id : ObjectId("583d0c1f2bd2cbdb117053c5") }] }]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda