diff --git a/week11/query.py b/week11/query.py new file mode 100644 index 0000000..708de0a --- /dev/null +++ b/week11/query.py @@ -0,0 +1,119 @@ +from pymongo import MongoClient +import datetime + +client = MongoClient("mongodb://localhost") +db = client['test'] + + +def ex1(): + cursor = db.restaurants.find({'cuisine': 'Irish'}) + print(len(list(cursor))) + + cursor = db.restaurants.find({'cuisine': 'Russian'}) + print(len(list(cursor))) + + cursor = db.restaurants.find({ + '$or': [{'cuisine': 'Irish'}, {'cuisine': 'Russian'}]}) + cursor_list = list(cursor) + print(len(cursor_list)) + + cursor = db.restaurants.find({ + 'address.building': '284', + 'address.street': 'Prospect Park West', + 'address.zipcode': '11215'}) + print(list(cursor)) + + +def atomic_insert_bestrest(): + bestrest = { + 'address': { + 'building': '126', + 'coord': [-73.9557413, 40.7720266], + 'street': 'Sportivnaya', + 'zipcode': '420500' }, + 'borough': 'Innopolis', + 'cuisine': 'Serbian', + 'name': 'The Best Restaurant', + 'restaurant_id': '41712354', + 'grades': [{ + 'date': datetime.datetime(2023, 4, 4, 0, 0), + 'grade': 'A', + 'score': 11 + }] + } + + db.restaurants.delete_many({'restaurant_id': '41712354'}) + + db.restaurants.insert_one(bestrest) + + cursor = db.restaurants.find({'restaurant_id': '41712354'}) + print(list(cursor)) + + +def delete_brooklyn1_ThaiN(): + db.restaurants.delete_one({'borough': 'Brooklyn'}) + db.restaurants.delete_many({'cuisine': 'Thai'}) + + +def insert_random_item_for_ex4(): + bestrest = { + 'address': { + 'building': '126', + 'coord': [-73.9557413, 40.7720266], + 'street': 'Prospect Park West', + 'zipcode': '177013' }, + 'borough': 'Innopolis', + 'cuisine': 'Serbian', + 'name': 'The Best Restaurant', + 'restaurant_id': '177013123', + 'grades': [{ + 'date': datetime.datetime(2023, 4, 4, 0, 0), + 'grade': 'B', + 'score': 11 + }] + } + + db.restaurants.delete_many({'restaurant_id': '177013123'}) + + db.restaurants.insert_one(bestrest) + + +def ex4(): + cursor = db.restaurants.find({ + 'address.street': 'Prospect Park West' + }) + restaurants = list(cursor) + + for restaurant in restaurants: + cnt = 0 + for grade in restaurant['grades']: + if grade['grade'] == 'A': + cnt = cnt + 1 + + if cnt >= 1: + result = db.restaurants.delete_one({'restaurant_id': restaurant['restaurant_id']}) + print(f'Deleted {result.deleted_count} items') + else: + result = db.restaurants.update_one( + {'restaurant_id': restaurant['restaurant_id']}, + {'$push': { + 'grades': { + 'date': datetime.datetime.utcnow(), + 'grade': 'A', + 'score': 11 + } + }}) + print('Modified:') + print(list(db.restaurants.find({'restaurant_id': restaurant['restaurant_id']}))) + + +def main(): + ex1() + atomic_insert_bestrest() + delete_brooklyn1_ThaiN() + insert_random_item_for_ex4() + ex4() + + +if __name__ == "__main__": + main()