MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

पायथन मोंगोडब के ओप्लॉग में परिवर्तन कैसे देख सकता है?

मैंने कुछ समय पहले पायथन में MongoDB के लिए एक वृद्धिशील बैकअप टूल लिखा था। यह टूल oplog . का अनुसरण करके डेटा परिवर्तनों पर नज़र रखता है . यहाँ कोड का प्रासंगिक हिस्सा है।

अपडेट किया गया उत्तर, मोंगडीबी 3.6+

जैसा कि नीचे दी गई टिप्पणियों में datdinhquoc चतुराई से इंगित करता है, MongoDB 3.6 और इसके बाद के संस्करण के लिए स्ट्रीम बदलें

अपडेट किया गया उत्तर, पाइमोंगो 3

from time import sleep

from pymongo import MongoClient, ASCENDING
from pymongo.cursor import CursorType
from pymongo.errors import AutoReconnect

# Time to wait for data or connection.
_SLEEP = 1.0

if __name__ == '__main__':
    oplog = MongoClient().local.oplog.rs
    stamp = oplog.find().sort('$natural', ASCENDING).limit(-1).next()['ts']

    while True:
        kw = {}

        kw['filter'] = {'ts': {'$gt': stamp}}
        kw['cursor_type'] = CursorType.TAILABLE_AWAIT
        kw['oplog_replay'] = True

        cursor = oplog.find(**kw)

        try:
            while cursor.alive:
                for doc in cursor:
                    stamp = doc['ts']

                    print(doc)  # Do something with doc.

                sleep(_SLEEP)

        except AutoReconnect:
            sleep(_SLEEP)

यह भी देखें http://api.mongodb.com/python/current/examples /tailable.html

मूल उत्तर, पाइमोंगो 2

from time import sleep

from pymongo import MongoClient
from pymongo.cursor import _QUERY_OPTIONS
from pymongo.errors import AutoReconnect
from bson.timestamp import Timestamp

# Tailable cursor options.
_TAIL_OPTS = {'tailable': True, 'await_data': True}

# Time to wait for data or connection.
_SLEEP = 10

if __name__ == '__main__':
    db = MongoClient().local

    while True:
        query = {'ts': {'$gt': Timestamp(some_timestamp, 0)}}  # Replace with your query.
        cursor = db.oplog.rs.find(query, **_TAIL_OPTS)

        cursor.add_option(_QUERY_OPTIONS['oplog_replay'])

        try:
            while cursor.alive:
                try:
                    doc = next(cursor)

                    # Do something with doc.

                except (AutoReconnect, StopIteration):
                    sleep(_SLEEP)

        finally:
            cursor.close()


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. खाली होने पर मूल डेटा लौटाते समय उप-दस्तावेज़ सरणी फ़िल्टर करें

  2. $match . के भीतर mongodb एकत्रीकरण क्वेरी में $regex का उपयोग कैसे करें

  3. MongoDB .Net ड्राइवर 2.0 खींचो (तत्व निकालें)

  4. नेवला मॉडल, स्ट्रिंग्स की सरणी, ऑब्जेक्ट संरचना की सरणी

  5. मोंगोडब पते पर अमान्य पहुंच के साथ दुर्घटनाग्रस्त हो गया - विभाजन दोष संकेत 11 - संस्करण 2.6