Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

139
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!