sql >> データベース >  >> NoSQL >> MongoDB

PyMongoのMapReduce

    集約フレームワーク を使用できます

    import pymongo
    conn = pymongo.MongoClient()
    db = conn.test
    col =  db.collection
    
    for doc in col.aggregate([{'$unwind': '$impressions'}, 
        {'$match': {'impressions.service': 'furniture'}}, 
        {'$group': {'_id': '$impressions.id', 'impressions_count': {'$sum': 1}}}, 
        ]):
        print(doc)
    

    または、 $ map および $ setDifference 演算子。

    col.aggregate([
        { "$project": { "impressions": {"$setDifference": [{ "$map": { "input": "$impressions", "as": "imp", "in": { "$cond": { "if": { "$eq": [ "$$imp.service", "furniture" ] }, "then": "$$imp.id", "else": 0 }}}}, [0]]}}}, 
        { "$unwind": "$impressions" }, 
        { "$group": { "_id": "$impressions", "impressions_count": { "$sum": 1 }}}
    ])
    

    どちらが得られますか:

    {'_id': 122.0, 'impressions_count': 1}
    {'_id': 124.0, 'impressions_count': 1}
    {'_id': 127.0, 'impressions_count': 1}
    {'_id': 123.0, 'impressions_count': 2}
    


    1. arrayFiltersを使用してMongoDBのネストされたサブドキュメントを更新します

    2. 'MongoMappingContext#setAutoIndexCreation(boolean)'を使用するか、' MongoConfigurationSupport#autoIndexCreation()'をオーバーライドして明示的にしてください

    3. MongoDB:複数の配列要素に一致します

    4. Mongoidを使用した計算フィールドに基づくクエリ