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

2024-06-25 05:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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\u nu\u 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
            }
    ]
}

等等, 如果我还有一个级别,如下面的例子,我想在哪里搜索“参加”菜单: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')        

                                             ])         
        }
]
}

Tags: iddbnuobjectidcaixaisodateusuariocax
1条回答
网友
1楼 · 发布于 2024-06-25 05:46:29

你需要聚合。尝试:

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
    }
  }
])

相关问题 更多 >