首页 > 解决方案 > 使用 pymongo 查询 mongoDB(对 mongo/pymongo 来说是全新的)

问题描述

如果这个问题看起来太琐碎,请在评论中告诉我,我将进一步研究如何解决它。

我有一个名为 products 的集合,我在其中存储来自不同零售商的特定产品的详细信息。文档的架构如下所示 -

{
    "_id": "uuid of a product",
    "created_at": "timestamp",
    "offers": [{
            "retailer_id": 123,
            "product_url": "url - of -a - product.com",
            "price": "1"
        },
        {
            "retailer_id": 456,
            "product_url": "url - of -a - product.com",
            "price": "1"
        }
    ]
}

产品的_id是系统生成的。考虑像“iPhone X”这样的产品。这将是一个包含来自亚马逊、eBay 等多个零售商的 URL 和价格的单一文档。

现在如果一个新的 URL 进入系统,我需要查询这个 URL 是否已经存在于我们的数据库中。执行此操作的明显方法是迭代每个产品文档的每个报价,并查看 product_url 字段是否与输入 URL 匹配。这将需要将所有文档加载到内存中,并逐个迭代每个产品的报价。现在我的问题出现了——

有没有更简单的方法来实现这一点?使用 pymongo?或者我的数据库架构需要更改,因为这个基本的 check_if_product_url_exists() 太复杂了?

标签: python-3.xmongodbdatabase-designpymongo-3.x

解决方案


MongoDB 使用点表示法在数组内提供搜索。

所以你的查询是:

db.collection.find({'offers.product_url': 'url - of -a - product.com'})

相同的语法适用于 MongoDB shell 或 pymongo。


推荐阅读