MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MapReduce w PyMongo

Możesz użyć struktury agregacji

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)

Lub wydajniej używając $map i $setDifference operatorów.

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 }}}
])

Co daje:

{'_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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tworzenie unikalnego klucza MongoDB za pomocą C#

  2. Jak przekonwertować ciąg do ObjectId w natywnym sterowniku nodejs mongodb?

  3. Mongodb:db.collection.copyTo() i eval() są przestarzałe. Jakie są alternatywy?

  4. Pierwsze kroki z nierelacyjnymi bazami danych przy użyciu Mongodb

  5. Czy istnieje możliwość wygenerowania duplikatu Mongo ObjectId w dwóch różnych kolekcjach?