如何在mongodb的词典列表中搜索单个词典?

时间:2019-05-29 16:08:21

标签: python mongodb dictionary

我在nep_caixa_retaguarda集合中有以下文档

rs0:PRIMARY> db.atendimento_sara.findOne()
{
    '_id' : ObjectId('5cee9785d1805f2b288a1614'),
    'usu_nu_usuario_abertura' : 511773,
    'cxr_nu_caixa_retaguarda' : 23008369,
    'dataAberturaSP' : ISODate('2019-01-02T00:11:24Z'),
    'caixa' : [
            {
                    'usu_nu_usuario' : 108349,
                    'cax_nu_caixa' : 89792153,
                    'dataAberturaSP' : ISODate('2019-01-02T18:54:45Z')
            },
            {
                    'usu_nu_usuario' : 498100,
                    'cax_nu_caixa' : 89791110,
                    'dataAberturaSP' : ISODate('2019-01-02T15:43:33Z')
            },
            {
                    'usu_nu_usuario' : 511773,
                    'cax_nu_caixa' : 89771306,
                    'dataAberturaSP' : ISODate('2019-01-02T00:11:38Z')
            }
    ]
}
{
    '_id' : ObjectId('6fhj9785d1807f2c289a3616'),
    'usu_nu_usuario_abertura' : 511700,
    'cxr_nu_caixa_retaguarda' : 23008370,
    'dataAberturaSP' : ISODate('2019-01-02T00:15:24Z'),
    'caixa' : [
            {
                    'usu_nu_usuario' : 108300
                    'cax_nu_caixa' : 89792161,
                    'dataAberturaSP' : ISODate('2019-01-02T18:59:45Z')
            },
            {
                    'usu_nu_usuario' : 498103,
                    'cax_nu_caixa' : 89791177,
                    'dataAberturaSP' : ISODate('2019-01-02T15:40:33Z')
            },
            {
                    'usu_nu_usuario' : 511700,
                    'cax_nu_caixa' : 89771350,
                    'dataAberturaSP' : ISODate('2019-01-02T00:27:38Z')
            }
    ]
}

我只选择具有“ cax_nu_caixa”字段的文档:89771306

尝试过的db.atendimento_sara.find({'caixa.cax_nu_caixa':89771306},{'cxr_nu_caixa_retaguarda':1,'caixa.cax_nu_caixa':1})。pretty()

返回

{
    '_id' : ObjectId('5cee9785d1805f2b288a1614'),
    'cxr_nu_caixa_retaguarda' : 23008369,
    'caixa' : [
            {
                    'cax_nu_caixa' : 89792153
            },
            {
                    'cax_nu_caixa' : 89791110
            },
            {
                    'cax_nu_caixa' : 89771306
            },
            {
                    'cax_nu_caixa' : 89788026
            },
            {
                    'cax_nu_caixa' : 89782847
            },
            {
                    'cax_nu_caixa' : 89787922
            },
            {
                    'cax_nu_caixa' : 89788272
            }
    ]
}

但是我只想要这个。我该怎么办?

{
    '_id' : ObjectId('5cee9785d1805f2b288a1614'),
    'cxr_nu_caixa_retaguarda' : 23008369,
    'caixa' : [
            {
                    'cax_nu_caixa' : 89771306
            }
    ]
}

还有更多, 如果我还有一个更高的级别(如以下情况),我要在哪里搜索“ attend_nu”:100?

rs0:PRIMARY> db.atendimento_sara.findOne()
{
'_id' : ObjectId('5cee9785d1805f2b288a1614'),
'usu_nu_usuario_abertura' : 511773,
'cxr_nu_caixa_retaguarda' : 23008369,
'dataAberturaSP' : ISODate('2019-01-02T00:11:24Z'),
'caixa' : [
        {
                'usu_nu_usuario' : 108349,
                'cax_nu_caixa' : 89792153,
                'dataAberturaSP' : ISODate('2019-01-02T18:54:45Z')
                'atendimento': [{
                                                    'atend_nu' : 100,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z'),
                                                {
                                                    'atend_nu' : 101,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z'),
                                                {
                                                    'atend_nu' : 102,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z')        

                                             ])         
        },
        {
                'usu_nu_usuario' : 498100,
                'cax_nu_caixa' : 89791110,
                'dataAberturaSP' : ISODate('2019-01-02T15:43:33Z')
                'atendimento': [{
                                                    'atend_nu' : 104,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z'),
                                                {
                                                    'atend_nu' : 105,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z'),
                                                {
                                                    'atend_nu' : 106,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z')        

                                             ])         
        },
        {
                'usu_nu_usuario' : 511773,
                'cax_nu_caixa' : 89771306,
                'dataAberturaSP' : ISODate('2019-01-02T00:11:38Z')
                'atendimento': [{
                                                    'atend_nu' : 107,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z'),
                                                {
                                                    'atend_nu' : 108,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z'),
                                                {
                                                    'atend_nu' : 109,
                                                    'dataInicioSP' : ISODate('2019-01-02T18:54:45Z')        

                                             ])         
        }
]
}

1 个答案:

答案 0 :(得分:0)

您需要为此进行汇总。试试:

db.atendimento_sara.aggregate([
  {
    $match: {
      "caixa.cax_nu_caixa": 89771306
    }
  },
  {
    $unwind: "$caixa"
  },
  {
    $match: {
      "caixa.cax_nu_caixa": 89771306
    }
  },
  {
    $project: {
      cxr_nu_caixa_retaguarda: 1,
      "caixa.cax_nu_caixa": 1
    }
  }
])