¿Cómo obtener valores de opts en una cadena con una expresión regular de MongoDB?
Quiero buscar gatos name y obtener gatos opts con expresiones regulares

Esquema:

const childSchema = new Schema({
    type: String,
    id: { type: Number, required: true, unique: true },
    title: String,
    message_text: String,
    parse_mode: String,
    thumb_url: String,
    description: String,
});

const parentSchema = new Schema({
    _id: Number,
    name: String,
    opts: childSchema,
});

Código:

Mq.aggregate(
    [
        {
            "$match": {
                "name": { "$regex": "c", "$options": "i" }
            }
        },
        { "$unwind": "$name" },
        {
            "$match": {
                "name": { "$regex": "c", "$options": "i" }
            }
        },
        {
            "$group": {
                "_id": "$opts",
            }
        }
    ],
    function (err, results) {
        if (err) {
            console.log(err)
        } else {
            console.log(results)
        }
    }
)

Salida:

[ { _id:
     { type: 'article',
       id: 2,
       title: 'persian cat',
       message_text: 'test',
       parse_mode: 'Markdown',
       thumb_url: 'http://www.immig-chicago.com/clientuploads/graphics/dvLottery_2a.jpg',
       description: 'des',
       _id: 5a011c3236bdcc2540747d0f } },
  { _id:
     { type: 'article',
       id: 1,
       title: 'cat',
       message_text: 'Hi',
       parse_mode: 'Markdown',
       thumb_url: 'http://www.immig-chicago.com/clientuploads/graphics/dvLottery_2a.jpg',
       description: 'des',
       _id: 59f7cf23ba668128fc48b8a7 } } ]

Pero necesito valores dentro de las opciones en la salida, me refiero a algo como esto:

{ type: 'article',
       id: 2,
       title: 'persian cat',
       message_text: 'test',
       parse_mode: 'Markdown',
       thumb_url: 'http://www.immig-chicago.com/clientuploads/graphics/dvLottery_2a.jpg',
       description: 'des',
       _id: 5a011c3236bdcc2540747d0f },
{ type: 'article',
       id: 1,
       title: 'cat',
       message_text: 'Hi',
       parse_mode: 'Markdown',
       thumb_url: 'http://www.immig-chicago.com/clientuploads/graphics/dvLottery_2a.jpg',
       description: 'des',
       _id: 59f7cf23ba668128fc48b8a7 } 

Actualización:
Tengo let opts = []; en mi proyecto y quiero eliminar la clave y obtener los valores de las opciones y ponerlos en let opts - [{},{},{},....]

Mis datos:

   [ [ { _id: 0, name: 'dog', opts: [Object], __v: 0 },
        { _id: 1, name: 'cat', opts: [Object], __v: 0 },
        { _id: 2, name: 'persian cat', opts: [Object], __v: 0 } ] ]
0
Saeed Heidarizarei 12 nov. 2017 a las 01:42

2 respuestas

La mejor respuesta

Resuelto ✔️

1: Encontré mis gatos name con expresiones regulares
2: I Got Cats opta valor por .distinct()

var regex = new RegExp("c", "i"); //Case insensitive Match
Mq.find().distinct('opts', {name: regex}, function(err, docs) {
    console.log(docs)
})

Salida:

    [{ type: 'article',
           id: 1,
           title: 'cat',
           message_text: 'Hi',
           parse_mode: 'Markdown',
           thumb_url: 'http://www.immig-chicago.com/clientuploads/graphics/dvLottery_2a.jpg',
           description: 'des',
           _id: 59f7cf23ba668128fc48b8a7 },
{ type: 'article',
           id: 2,
           title: 'persian cat',
           message_text: 'test',
           parse_mode: 'Markdown',
           thumb_url: 'http://www.immig-chicago.com/clientuploads/graphics/dvLottery_2a.jpg',
           description: 'des',
           _id: 5a011c3236bdcc2540747d0f } ]
0
Sedric Heidarizarei 12 nov. 2017 a las 22:06

Sé una cosa con seguridad: puedes usar $ project contigo Mq.aggregate para ocultar _id en el resultado final asignando el valor de esta manera: { _id: 0 }.

También encontré esto que podría ayudar;)

0
oetoni 11 nov. 2017 a las 23:09