【问题标题】:How to correctly query a MongoDB nested document with python?如何使用 python 正确查询 MongoDB 嵌套文档?
【发布时间】:2018-12-20 01:44:24
【问题描述】:

背景:这周我刚刚学习了数据库和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 的一般经验是零。

【问题讨论】:

    标签: python python-3.x mongodb pymongo


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 2016-08-16
      • 2015-02-10
      • 2012-10-17
      • 2016-05-07
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多