Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda