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

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

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 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!