-
Notifications
You must be signed in to change notification settings - Fork 0
/
mongoScrape.py
177 lines (141 loc) · 5.9 KB
/
mongoScrape.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import pymongo
from urllib.parse import quote
from bson import ObjectId
from pa import password,db_name,user_name
password = password
encoded_password = quote(password)
user_name = user_name
db_name = db_name
def main():
client = create_mongo_connection(user_name, encoded_password, db_name)
db = create_mongo_db(client, db_name)
test_connection(db)
display_collections(db)
# Main menu
while True:
print("\n--- Main Menu ---")
print("1. Display sample documents")
print("2. Display all documents in a collection")
print("3. Get specific key-value")
print("4. Count key-value pairs")
print("5. Get distinct key values")
print("6. Get logincode")
print("8. Exit")
choice = input("\nEnter your choice: ")
if choice == "1":
collection = input('Please enter collection name')
display_samples(db, collection)
elif choice == "2":
collection_name = input("Enter collection name: ")
display_all_documents_in_a_collection(db, collection_name)
elif choice == "3":
collection_name = input("Enter collection name: ")
document_id = input("Enter document ID: ")
key = input("Enter key: ")
value = get_specific_key_value(db, collection_name, document_id, key)
print(f"The {key} for document with ID '{document_id}' is: {value}")
elif choice == "4":
collection_name = input("Enter collection name: ")
key = input("Enter key: ")
value = input("Enter value: ")
count = count_key_value(db, collection_name, key, value)
print(f"There are {count} documents with '{key}': '{value}'.")
elif choice == "5":
collection_name = input("Enter collection name: ")
key = input("Enter key: ")
distinct_values = get_distinct_key_values(db, collection_name, key)
print(f"The distinct {key} values in {collection_name} are:")
for i in distinct_values:
print(i)
elif choice == "6":
phone1 = input("Please enter the user's phone number: ")
loginCode = get_loginCode(db, phone1)
print(f'The code is {loginCode}')
elif choice == "8":
break
else:
print("Invalid choice. Please try again.")
# Function to create MongoDB connection
def create_mongo_connection(user_name, encoded_password, db_name):
# Connect to MongoDB using the given credentials and return the database object
client = pymongo.MongoClient(
f"mongodb+srv://{user_name}:{encoded_password}@cluster0.qnr3p.mongodb.net/{db_name}?retryWrites=true&w=majority")
return client
def close_connection(client):
client.close()
def create_mongo_db(client, db_name):
# Connect to MongoDB using the given credentials and return the database object
db = client[db_name]
return db
# Function to test the MongoDB connection
def test_connection(db):
try:
db.command("ping")
print("Connected to MongoDB.")
except Exception as e:
print("Error connecting to MongoDB:", e)
# Function to get a list of collection names in the given database
def get_collections(db):
collections = db.list_collection_names()
return collections
# Function to display collection names in the given database
def display_collections(db):
collections = db.list_collection_names()
for collection in collections:
print(f'Collection name: {collection}')
# Function to display document count and an example document for each collection in the given database
def display_samples(db, collection):
collections = get_collections(db)
for i in collections:
if i == 'adminusers':
sample_collection = db[i]
document_count = sample_collection.count_documents({})
print(f"There are {document_count} documents in the {i} collection.")
print(f'Example data set: {sample_collection.find_one()}')
# Function to display all documents in a given collection
def display_all_documents_in_a_collection(db, collection_name):
collection = db[collection_name]
documents = collection.find()
for document in documents:
print(document)
# Function to get the value of a specific key in a document identified by its ID in a given collection
def get_specific_key_value(db, collection_name, document_id, key):
collection = db[collection_name]
document = collection.find_one({'_id': ObjectId(document_id)})
if document:
value = document.get(key)
return value
else:
return None
def get_loginCode(db, phone):
collection = db['users']
document = collection.find_one({'phone': phone})
if document:
value = document.get('loginCode', 'NoValue')
return value
else:
return None
# Function to count the documents with a specific key-value pair in a given collection
def count_key_value(db, collection_name, key, value):
collection = db[collection_name]
count = collection.count_documents({key: value})
return count
# Function to get the distinct values of a specific key in a given collection
def get_distinct_key_values(db, collection_name, key):
collection = db[collection_name]
distinct_values = collection.distinct(key)
return distinct_values
# Function to test the stock status of products in the 'products' collection
def test_product_stock(db):
products = db['products']
out_of_stock_products = products.count_documents({"productStock": 0})
print(f"There are {out_of_stock_products} out-of-stock products.")
# Function to test the order status in the 'orders' collection
def test_orders(db):
orders = db['orders']
pending_orders = orders.count_documents({"status": "ready"})
print(f"There are {pending_orders} ready orders.")
# Main function
### Credentials
if __name__ == '__main__':
main()