【问题标题】:How to get distinct values from PyMongo with selected fields?如何使用选定字段从 PyMongo 获取不同的值?
【发布时间】:2021-08-25 06:34:50
【问题描述】:

在 MongoDB 中,我有一个大学数据集。我只需要获取不同的名称和 sourceURL,我的收藏包含:

dict_keys(['_id', 'name','univ_id','sourceUrl'])

使用 PyMongo,我可以通过以下方式获得不同/唯一的 URL:

data = data_col.find({"univ_id": "glaacuk"}).distinct('sourceUrl')

并且我可以通过以下方式获取名称和 sourceURL(但不是不同的值):

data = data_col.find({"univ_id": "glaacuk"}, {'sourceUrl': 1, 'name': 1, '_id': 0})

我曾尝试使用 data = data_col.find({"univ_id": "glaacuk"}, {'sourceUrl': 1, 'name': 1, '_id': 0}).distinct('sourceUrl') 仅获取不同的名称和 sourceUrl,但没有成功。

我怎样才能只获得不同的名称和 sourceURL ?

提前致谢。

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    要在单个列上获取不同的值,您可以使用 .distict()

    要在多个列上获取不同的值,请使用 .aggregate()$group 阶段。

    例子:

    from pymongo import MongoClient
    
    collection = MongoClient()['mydatabase']['mycollection']
    
    collection.insert_many([{'name': "a", 'age': 23},
                            {'name': "a", 'age': 23},
                            {'name': "a", 'age': 24},
                            {'name': "b", 'age': 23},
                            {'name': "b", 'age': 23},
                            {'name': "b", 'age': 23}])
    
    for record in collection.aggregate([{'$group': {'_id': {'name': '$name', 'age': '$age'}}}]):
        print(record)
    

    打印:

    {'_id': {'name': 'a', 'age': 24}}
    {'_id': {'name': 'a', 'age': 23}}
    {'_id': {'name': 'b', 'age': 23}}
    

    (如果需要,使用$project 舞台来美化它)

    【讨论】:

    • 我尝试使用:for record in data_col.aggregate([{"$match": {"univ_id": "glaacuk"}}, {'$group': {'_id': {'sourceUrl': '$sourceUrl', 'name': '$name', 'courseLevel': '$courseLevel'}}} ]): 但是,我仍然得到重复的值。有什么建议吗?
    猜你喜欢
    • 2015-07-24
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多