Estoy trabajando en una aplicación que usa MongoDB (yo uso Mongoose) como base de datos.
Tengo una pregunta, supongamos que tengo este tipo de esquema:
[{ "user_id":"2328292073" "username":"Bob", "subscriptions":[ { "id":"38271281, "payments":[ { "id":"00001", "amount":"1900" }, { "id":"00002", "amount":"2000" }, { "id":"00003", "amount":"3000" } ] } ] }]En mi caso, quiero obtener la matriz de pagos para la suscripción con id = '38271281' del usuario con id '2328292073', pero solo quiero recuperar la matriz de pagos, nada más
Mi consulta es la siguiente:
Mongoose.findOne({ "user_id": "2328292073", "subscriptions.id": "38271281" }, { "subscriptions.payments": 1 })Pero me sale todo el documento de suscripciones. ¿Cómo puedo obtener solo la matriz de pago?
puede intentar usar unwind si desea filtrar solo desde db.
Mongoose.aggregate([ { '$match': { 'user_id': '2328292093' } }, { '$unwind': { 'path': '$subscriptions' } }, { '$match': { 'subscriptions.id': '38271281' } } ])si tiene varios documentos con la misma identificación de suscripción, debe agruparlos.
Puede probar los operadores de agregación en proyección en el método de búsqueda o también usar el método de agregación,
$reduce para iterar el bucle de subscriptions y verificar la condición si la identificación coincide y luego devolver la matriz de pago db.collection.find({ "user_id": "2328292073", "subscriptions.id": "38271281" }, { payments: { $reduce: { input: "$subscriptions", initialValue: [], in: { $cond: [ { $eq: ["$$this.id", "38271281"] }, "$$this.payments", "$$value" ] } } } })