如何使用python正确查询MongoDB嵌套文档?

时间:2018-07-11 23:01:43

标签: python python-3.x mongodb pymongo

背景:本周我刚刚学习了数据库和mongo的基础知识。

我有一个名为“ orderstest”的10K文档,其基本格式如下:

{
    "_id": {
        "$oid": "2309823082039482"
    },
    "Order": "12345678920000",
    "Client": "Client Name Inc.",
    "OrderUId": "3452-2342-9393-0100",
    "OrderItems": [
        {
            "Client": "Client Name Inc.",
            "Details": [
                {
                    "Key": "EnterpriseCode",
                    "Value": "XYZ1000"
                },
                {
                    "Key": "AWSRegion",
                    "Value": "Frankfurt"
                },

            ],
            "ProductUId": "A90",
            "OrderItemUId": "ABC1000",
        }
    ],
    "__v": 0
}

我必须创建一个python3脚本来将这些条目与一些AWS信息进行比较。 我要做的第一件事是获取与ProductUId匹配的所有文档 “ A90”或“ B90”。

我在mongo shell中运行了此查询,它起作用了:

db.orderstest.find({
  OrderItems:{$elemMatch: {
                     ProductUId:"A90"
                 
                } 

}
})

但是当我尝试将其放入脚本时,它会引发以下错误:

    'OrderItems':{'$elemMatch': {
                               ^
SyntaxError: invalid character in identifier

此外,我需要创建所有“ A90”或“ B90”的条件,这些条件是通过阅读 文档,并尝试调整一些我无法实现的功能。我还应该指出,我已经阅读了MongoDB文档几个小时,但是由于我对DB的空缺经验,对我来说这绝对没有意义。

1 个答案:

答案 0 :(得分:0)

对于“ 我要做的第一件事是获取其ProductUId匹配“ A90”或“ B90”的所有文档。

.find({"OrderItems.ProductUId": {"$in":["A90","B90"]}})

会工作。不确定为什么要使用$ elemMatch,似乎没有必要吗?