bsition/bsition/backend/mongo.py

71 lines
1.7 KiB
Python

from os import getenv
from bson import ObjectId
from pymongo import MongoClient
from bsition.backend import elastic
def get_database():
client = MongoClient(getenv("MONGO_URL"))
return client["documents"]
def get_documents():
dbname = get_database()
docs_coll = dbname["docs"]
pipeline = [
{
"$project": {
"id": {"$toString": "$_id"},
"_id": 0,
"data": 1,
"name": 1,
"access": 1,
"owner": 1,
}
}
]
return list(docs_coll.aggregate(pipeline))
def create_document(document):
dbname = get_database()
docs_coll = dbname["docs"]
doc = document.copy()
docs_coll.insert_one(document)
elastic.add_document("test-index", document["_id"], doc)
def get_document_by_id(id):
dbname = get_database()
docs_coll = dbname["docs"]
doc = docs_coll.find({"_id": ObjectId(id)}, {"_id": 0}).next().items()
return doc
def get_document_by_name(name):
dbname = get_database()
docs_coll = dbname["docs"]
return docs_coll.find({"name": name})
def edit_data(id, data):
dbname = get_database()
docs_coll = dbname["docs"]
docs_coll.update_one({"_id": ObjectId(id)}, {"$set": {"data": data}})
doc = docs_coll.find_one({"_id": ObjectId(id)}, {"_id": 0})
elastic.add_document("test-index", id, doc)
def edit_access(id, access):
dbname = get_database()
docs_coll = dbname["docs"]
docs_coll.update_one({"_id": ObjectId(id)}, {"$set": {"access": access}})
def edit_name(id, name):
dbname = get_database()
docs_coll = dbname["docs"]
docs_coll.update_one({"_id": ObjectId(id)}, {"$set": {"name": name}})