【问题标题】:Get field value in MongoDB without parent object name在没有父对象名称的MongoDB中获取字段值
【发布时间】:2020-08-20 19:03:51
【问题描述】:

我正在尝试找到一种方法来通过 python 脚本检索 MongoDB 上的一些数据 但我陷入了以下情况:

我必须检索一些数据,检查字段值并与另一个数据(MongoDB 文档)进行比较。 但对象的名称可能因每个模块而异,见下文:

文档 1

{
"_id": "001",
"promotion": {
    "Avocado": {
        "id": "01",
        "timestamp": "202005181407",
    },
    "Banana": {
        "id": "02",
        "timestamp": "202005181407",
    }
},
"product" : {
    "id" : "11"
}

文档 2

{
    "_id": "002",
    "promotion": {
        "Grape": {
            "id": "02",
            "timestamp": "202005181407",
        },
        "Dragonfruit": {
            "id": "02",
            "timestamp": "202005181407",
        }
    },
    "product" : {
        "id" : "15"
    }
}   

我将有一个名为promotion 的对象,但孩子的名字可能会有所不同,有时它是一个有序的数字,有时不是。我需要该值的字段是promotion 内的id,它将具有相同的名称。 因此,如果文档符合条件,我将使用 python 检索并完成其余工作。

PS.:我不是负责这种文档结构的人。

我已经尝试过这些文档,但无法让它们按我需要的方式工作。

$all

$elemMatch

【问题讨论】:

  • 如果您要检索文档 2,您是否要同时获取 Grape 和 Dragonfruit 的 id?还是只有一个?如果只有一个,您如何确定选择哪一个?如果两者都有,您是否正在寻找一个同时返回两个 id 的数组?
  • 我需要所有文档的 id。

标签: python mongodb


【解决方案1】:

试试这个 python 管道:

[
    {
        '$addFields': {
            'fruits': {
                '$objectToArray': '$promotion'
            }
        }
    }, {
        '$addFields': {
            'FruitIds': '$fruits.v.id'
        }
    }, {
        '$project': {
            '_id': 0, 
            'FruitIds': 1
        }
    }
]

产生的输出:

{FruitIds:["01","02"]},
{FruitIds:["02","02"]}

这是想要的输出吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2019-05-24
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多