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

148
Visualizações
Mongoose agregar a la matriz de matriz anidada si existe crear de lo contrario

Estoy tratando de lograr lo siguiente en mangosta:

Digamos que tengo la siguiente colección.

 { "_id": { "$oid": "111" }, "email": "xxx@mail.com", "givenName": "xxx", "familyName": "xxx", "favoriteProducts": [{ "soldTo": "33040404", "skus": ["W0541", "W2402"] }, { "soldTo": "1223", "skus": ["12334"] }] }

quiero poder agregar un sku a la matriz de productos favoritos en función de soldTo y _id. Al hacer esto hay dos escenarios posibles.

una. Ya hay un objeto en los productos favoritos con el objeto vendido a, en cuyo caso el sku simplemente se agrega a la matriz (por ejemplo, agregue el sku '12300' a vendido a '1223' para el id '111')

b. Todavía no hay ningún objeto con el objeto vendido a, en cuyo caso este objeto debe crearse con el sku y el objeto vendido dados. (por ejemplo, agregue sku '123' a soldTo '321' para id '111')

hasta ahora he hecho esto, pero siento que hay una manera de hacerlo en una sola consulta.

 private async test() { const soldTo = '1223'; const sku = '12300'; const id = '111'; const hasFavoriteForSoldTo = await userModel.exists({ _id: id, 'favoriteProducts.soldTo': soldTo, }); if (!hasFavoriteForSoldTo) { await userModel .updateOne( { _id: id, }, { $addToSet: { favoriteProducts: { skus: [sku], soldTo } } }, ) .exec(); } else { await userModel .updateOne( { _id: id, 'favoriteProducts.soldTo': soldTo, }, { $addToSet: { 'favoriteProducts.$.skus': sku } } ) .exec(); } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Usar actualizar-documentos-con-canalización-de-agregación

Echa un vistazo a la zona de juegos de mongo a continuación. No estoy seguro de querer la Salida 1 o la Salida 2 .

Salida 1

 db.collection.update({ _id: { "$oid": "111222333444555666777888" } }, [ { $set: { favoriteProducts: { $cond: { if: { $in: [ "1223", "$favoriteProducts.soldTo" ] }, then: { $map: { input: "$favoriteProducts", as: "f", in: { $cond: { if: { $eq: [ "1223", "$$f.soldTo" ] }, then: { $mergeObjects: [ "$$f", { skus: [ "12300" ] } ] }, else: "$$f" } } } }, else: { $concatArrays: [ "$favoriteProducts", [ { skus: [ "12300" ], soldTo: "1223" } ] ] } } } } } ], { multi: true })

parque infantil mongo


Salida 2

 db.collection.update({ _id: { "$oid": "111222333444555666777888" } }, [ { $set: { favoriteProducts: { $cond: { if: { $in: [ "1223", "$favoriteProducts.soldTo" ] }, then: { $map: { input: "$favoriteProducts", as: "f", in: { $cond: { if: { $eq: [ "1223", "$$f.soldTo" ] }, then: { $mergeObjects: [ "$$f", { skus: { $concatArrays: [ [ "12300" ], "$$f.skus" ] } } ] }, else: "$$f" } } } }, else: { $concatArrays: [ "$favoriteProducts", [ { skus: [ "12300" ], soldTo: "1223" } ] ] } } } } } ], { multi: true })

parque infantil mongo

about 4 years ago · Juan Pablo Isaza 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